我想为模板类中的成员函数有几个不同的函数定义。事情是这样的:专用模板成员函数?
template <typename T>
class MyClass
{
void Foo();
T val;
//other functionality and data
};
//handles all types
template <typename T>
void MyClass<T>::Foo()
{
return val;
}
//handles a special type in a different way
template <>
void MyClass<float>::Foo()
{
return val + 5.0f;
}
我试图实现与上述这一点,并得到一个链接错误为每个特殊类型的我尝试显式实例。链接器错误提到该函数已经被定义过。也许我在错误的地方看,但我找不到任何资源来帮助我找出这个问题:(
问:这是可能的吗?如果是这样,你如何做到这一点,为什么它的工作?
谢谢!
我刚刚粘贴您的定义在头文件中,这是我从两个不同的源文件包括在内;在两个源文件中,我为专门和非专用模板类的实例都调用了Foo()方法。一切正常,用g ++ - 4.4.3。你能否提供一些关于链接器错误和项目结构的更多细节? – misberner
这应该工作;你的问题必须在别处。确保您熟悉常规模板机制以及标题和链接问题。 –
[适用于我](https://ideone.com/IpHd0)。 –