如何在C++的专用模板类中访问模板类成员字段
How do I access a template class member field in a specialised template class in C++?
我正在尝试编写一个模板类,该模板类具有传递类型的成员,该成员应该用于专用模板类的方法。喜欢这个:
template <class T>
class MyTemplateClass
{
public:
MyTemplateClass() {}
void DoSomething()
{
DoSomethingWithMember();
}
void DoSomethingWithMember() {}
protected:
T m_member;
};
template<>
class MyTemplateClass<float>
{
public:
void DoSomethingWithMember()
{
printf("Member is %f", m_member);
}
};
这样我就可以拨打这样的电话:
MyTemplateClass<float> obj2 = MyTemplateClass<float>();
obj2.DoSomething();
专用模板类无法编译,并给出错误:
"使用未声明的标识符
m_member
"。
有没有办法让专用模板类访问原始类成员,而无需使用新的专用类型复制代码?或者任何其他方法可以实现我在这里尝试做的事情?
或者,您可以只专门研究一种方法,例如:
template <class T>
class MyTemplateClass
{
public:
MyTemplateClass(T t) : m_member(t) {}
void DoSomething() { DoSomethingWithMember(); }
void DoSomethingWithMember();
protected:
T m_member;
};
// **Fully** Specialize DoSomethingWithMember for float.
template <>
void MyTemplateClass<float>::DoSomethingWithMember()
{
std::cout << "Member is " << m_member;
}
演示
这样我就可以拨打这样的电话:
MyTemplateClass<float> obj2 = MyTemplateClass<float>(); obj2.DoSomething();
专用模板类不会编译,给出错误:"使用未声明的标识符'm_member'"。
这是因为模板专用化与泛型类模板无关。专业化需要的任何事情都必须在专业化中实现。如:
template<>
class MyTemplateClass<float>
{
public:
void DoSomething()
{
DoSomethingWithMember();
}
void DoSomethingWithMember()
{
printf("Member is %f", m_member);
}
float m_member;
};
相关文章:
- C++ 传递指向对象的指针的指针,无法访问成员
- 从不同C++类的成员变量访问成员函数
- 使用 getter 访问成员变量C++
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 通过多个类访问成员时出错
- 如何在使用对象指针时访问成员函数
- 为什么相应成员不能正确访问成员函数指针
- 从两个不同类继承的非虚拟基类的访问成员
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用常数向量访问成员函数
- 访问成员函数中参数的类成员
- C++嵌套结构初始化和访问成员
- 通过指向班级第一个成员的指针访问成员是不确定的行为吗?
- 如何使用C STD :: SET中的迭代器访问成员功能
- 访问成员C 时,结构的向量生成了范围的错误
- 带指针的班级访问成员
- 从聚合类访问成员变量
- 如何访问成员变量 sqlite 回调
- ctypes/C++segfault访问成员变量
- 通过父类型的指针或直接从派生类访问成员函数的差异