嗨所以我有一个名为Body的模板类,它将一个sf :: Drawable后代作为模板参数,我试图仅在模板参数为sf的情况下覆盖Render()函数::形状。
我如何以非内联方式执行此操作?当我在类中定义函数时,代码可以正常工作,自动使其内联,但我得到链接错误(多个渲染)检测到的符号)当我在单独的.cpp文件中定义函数时。
如果这有助于产生错误的代码:
// in the header file
template<typename drawable= void>
class Body : public sf::Drawable
{
void Render(){Do_Something();
}
template <>
class Body<Shape> : public sf::Drawable
{
void Render();
}
// in the cpp file
void Body<Shape>::Render()
{
Do_Something_Else();
}
答案 0 :(得分:1)
你的意思是这样吗?
template <typename T>
struct Foo {
int frob() const;
};
// Note: Member function specializations do not require
// full class specializations.
template <typename T>
int Foo<T>::frob() const { return 42; }
template <>
int Foo<float>::frob() const { return 0xbeef; }
#include <iostream>
int main () {
std::cout << Foo<int>().frob() << '\n';
std::cout << Foo<float>().frob() << '\n';
}
请注意,特殊化需要在您使用它们的位置可见,因此在大多数情况下,您也必须将它们放在标题中。