私は、このセットアップを持っている:UがDontUseに設定されている場合このテンプレートメンバー関数はどのように特化しますか?
class DontUse;
template<class T,class U = DontUse, class V = SomeStandardType>
class Foo
{
public:
void bar(U &uh);
};
は、私はバーが空の関数になりたいです。他のすべてのケースでは、私はバーにいくつかの実装をして欲しい。私は、この使用して専門分野をやってみましたが、(私は何とか間違っている実現)このコードはコンパイルされません:
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
@ネイト:はい、私はそれを質問に入れました。 – TravisG