複数の型パラメータT1
とT2
を持つテンプレートクラスを作成しようとしています。クラスには、std::promise<T2>
のプライベートメンバーがあります。 T2
は、限り、あなたはパラメータなしでsetValue
を呼び出さないよう、ボイド何でも(あるとき条件付きメンバーの署名とテンプレート型パラメータに基づく実装
template <class T, class T2>
class Test
{
public:
void setValue(T2 value)
{
promise.set_value(value);
}
void setValue()
{
promise.set_value();
}
private:
std::promise<T2> promise;
};
このクラスはうまくコンパイルT2
が無効であるとき、私は、コンパイラのエラーを取得:。
error C2182: 'value' : illegal use of type 'void'
T2
は無効ですが、最初のsetValue
メソッドを使用したいと思います。T2
の1つのパラメータを持ちます。T2
が無効の場合は、パラメータを持たない2番目のsetValue
メソッドを使用したいと思います。多くの例が、私はテンプレートプログラミングには比較的新しいので、私はそれを動作させるように見えません。
std :: enable_ifでこれを実現できますか?または、テンプレートの特殊化?
私の答えを複製します。 ;) – ypnos
@ypnos:あなたの編集タイムスタンプを確認してください –
ありがとう、それを解決!しかし、 'test'がアクセスできない' promise'にアクセスする別の方法があります。私はその方法をどこに置くべきですか?私はもちろんそれを保護することができますが、私はそれが異なって行うことができますかと思うだけです。 – jkokorian