我正在尝试编写一个模板类,该模板类具有传递类型的成员,该成员应该用于专用模板类的方法。喜欢这个:
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;
};