我有這樣的設置:如何專門化這個模板成員函數?
class DontUse;
template<class T,class U = DontUse, class V = SomeStandardType>
class Foo
{
public:
void bar(U &uh);
};
當U設置爲DontUse,我想欄是空的功能。在所有其他情況下,我希望酒吧有一些實施。我試着這樣做使用專業化,但是這個代碼(這是我知道的是莫名其妙不正確的)不會編譯:
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);
}
你可以發佈你的專業類的定義嗎? – Nate 2012-02-29 15:52:46
@Nate:是的,我把它放在問題中。 – TravisG 2012-02-29 16:17:16