2012-03-08 5 views
2

テンプレートクラスは、コンストラクタに渡されるクラスの型に基づいてパラメータを自動的に選択します。 オブジェクトには既に型があります。オーバーロードされたコンストラクタに基づくポリシークラステンプレートパラメータの選択

InputA a; 
InputA a2; 
InputB b; 

これらのタイプは

out<>(a) out; 

out<InputA>(a) out; 

あるコンストラクタによって理解されるべきです。

out<>(a2) out; 

out<InputA>(a2) out; 

です。

out<>(b) out; 

は、これは入力パラメータの種類から抽出することができるテンプレート引数(ポリシー)を定義するために冗長と思わ

out<InputB>(b) out; 

あります。

答えて

7

std::pairと同じ問題が発生します。 この問題の標準的な回避策は、テンプレートファクトリを定義することです(std::make_pair()など)。

template<class policy> 
out<policy> make_out(policy p) 
{ 
    return out<policy>(p); 
} 

auto o = make_out(a); 
+0

これは良いです。しかし確かに、関数の代わりにクラスでこれを行う方法はありますか? CRTPのようなものがありますか? –

+1

私はこのようなことを知らない。 – authchir

関連する問題