模板中定义的类型用于定义类的模板方法
Type defined in template use to define template method of the class
下面是代码示例:
template <class T>
class CMessage
{
public:
using message_ptr = typename std::shared_ptr<T>;
static message_ptr Create (T val)
{
return std::make_shared<T>(val);
}
};
class CBuilder
{
public:
template <typename MT> MT::message_ptr CreateMessage()
{
return MT::message_ptr();
}
};
CBuilder builder;
CMessage<int>::message_ptr msg = builder.CreateMessage<CMessage<int>>();
CBuilder类是正确的吗?可以在CBuilder中使用MT::message_ptr ?
当您编写"MT::message_ptr"时,您实际上编写了一个依赖于参数模板(MT)定义的表达式:这称为依赖表达式。
编译器的问题是知道"message_ptr"是类型名还是其他东西(函数,变量…)的名称。为了解决这个问题,标准要求类型名的任何依赖表达式都要以关键字…作为前缀。 typename : -)
下面是成员函数模板的正确定义:template <typename MT>
typename MT::message_ptr CreateMessage()
{
return typename MT::message_ptr();
}
编辑
顺便说一句,"std::shared_ptrusing message_ptr = std::shared_ptr<T>;
相关文章:
- 单独定义模板化嵌套类方法的正确语法
- OpenGL 顶点缓冲区类重定义和模板方法错误
- 模板类中的模板方法,在类外定义
- 递归std ::函数定义模板类方法
- 模板方法定义的问题 - 错误C2244:无法将函数定义与现有声明匹配
- 找不到用于专用化的定义的"内联"模板方法
- 方法已定义(模板类)
- C++模板方法定义在类中不匹配
- 为什么通用模板方法定义与模板类专用化不匹配?
- boost:enable_if 在模板化类中定义专用方法
- 定义模板类的方法
- 了解C++模板方法定义语法
- 对 C++ 中模板方法的未定义引用
- 如何避免在模板专门化中重新定义类方法
- 模板中定义的类型用于定义类的模板方法
- 如何定义模板类中方法的返回类型
- 如何为对象定义模板化方法,其中一些对象也是模板化的
- 在命名空间外定义好友模板方法
- 当模板类型的行为相同时,定义模板化类的成员函数的正确方法是什么?
- 定义模板方法专门化的正确语法是什么?