我有这个设置:
class DontUse;
template<class T,class U = DontUse, class V = SomeStandardType>
class Foo
{
public:
void bar(U &uh);
};
当 U 设置为 DontUse 时,我希望 bar 是一个空函数。在所有其他情况下,我希望 bar 有一些实现。我尝试使用专门化来执行此操作,但此代码(我意识到它在某种程度上是不正确的)无法编译:
template<class T,class V> void Foo<T,DontUse,V>::bar(DontUse &none){}
template<class T,class U,class V> void Foo<T,U,V>::bar(U &uh)
{
//do something here
}
错误信息是这样的(MSVC10):
1>path_to_project: error C2244: 'Foo<T,U,V>::bar' : unable to match function definition to an existing declaration
它指向第一个模板特化的行。
如何正确执行此操作?
这是实际的代码,尽管它被简化为相关的极简部分:
struct DontUse;
template<typename Derived, typename Renderer = DontUse, typename TimeType = long>
class Gamestate
{
public:
void Render(Renderer &r);
};
template<typename Derived, typename TimeType> void Gamestate<Derived, DontUse,TimeType>::Render( DontUse){}
template<typename Derived, typename Renderer, typename TimeType> void Gamestate<Derived,Renderer,TimeType>::Render(Renderer &r)
{
static_cast<Derived*>(this)->Render(r);
}
最佳答案
您不能特化模板的单个成员。你必须专门化类(class)本身:
class DontUse;
template<class T, class V>
class Foo<T, DontUse, V>
{
public:
void bar(DontUse)
{ }
};
关于c++ - 我如何专门化这个模板成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502197/