如何在 C++ 中访问专用模板 class 中的模板 class 成员字段?
How do I access a template class member field in a specialised template class in C++?
我正在尝试编写一个模板 class,它有一个传递类型的成员,该类型应该用于专用模板 class 的方法。像这样:
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();
专用模板class无法编译,给出错误:
"Use of undeclared identifier m_member
".
有没有一种方法可以让专用模板 class 访问原始 class 成员,而无需使用新的专用类型复制代码?或者任何其他方式来实现我在这里尝试做的事情?
So that I can make calls like:
MyTemplateClass<float> obj2 = MyTemplateClass<float>();
obj2.DoSomething();
The specialised template class won't compile, gives the error: "Use of undeclared identifier 'm_member'".
那是因为模板专业化与通用 class 模板无关。专业化需要的任何东西都必须在专业化中实现。如:
template<>
class MyTemplateClass<float>
{
public:
void DoSomething()
{
DoSomethingWithMember();
}
void DoSomethingWithMember()
{
printf("Member is %f", m_member);
}
float 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;
}
我正在尝试编写一个模板 class,它有一个传递类型的成员,该类型应该用于专用模板 class 的方法。像这样:
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();
专用模板class无法编译,给出错误:
"Use of undeclared identifier
m_member
".
有没有一种方法可以让专用模板 class 访问原始 class 成员,而无需使用新的专用类型复制代码?或者任何其他方式来实现我在这里尝试做的事情?
So that I can make calls like:
MyTemplateClass<float> obj2 = MyTemplateClass<float>(); obj2.DoSomething();
The specialised template class won't compile, gives the error: "Use of undeclared identifier 'm_member'".
那是因为模板专业化与通用 class 模板无关。专业化需要的任何东西都必须在专业化中实现。如:
template<>
class MyTemplateClass<float>
{
public:
void DoSomething()
{
DoSomethingWithMember();
}
void DoSomethingWithMember()
{
printf("Member is %f", m_member);
}
float 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;
}