次のテンプレートがあるとします。
テンプレート<クラス T> クラスコンテナ { プライベート: boost::function<T> f; };
... およびそのインスタンス化は、おそらく次のようになります。
Container<bool(int, int)> myContainer;
、関数記述の戻り値の型にアクセスし、それに対して条件付きでコンパイルする方法はありますか? たとえば、呼び出し元が自分の関数が bool を返すように指定した場合 (上記の場合のように)、値を返す関数を含めたいと思います。彼が関数が無効であると指定した場合、この関数を含めたくありません。例えば:
// Include if the return type of T is void
template<class T1, class T2>
void DoSomething(T1 t1, T2 t2)
{
f(t1, t2);
}
// Include if the return type of T is not void
template<class T1, class T2>
***whatever the return type is*** DoSomething(T1 t1, T2 t2)
{
return f(t1, t2);
}
ここに解決策があると思いますが、おそらく、恐ろしく難読化されたテンプレート メタプログラミング ソリューションが関係しています。Gregor Cantor が無限を考えて発狂したことは知っています... テンプレートのメタプログラミングのようなものは、私にも同じ影響を与えます :p.
ご意見ありがとうございます。
ロビンソンT
編集: 明らかに、これは別のクラス (おそらく共通のベースから派生) を実装することで解決できます。1 つは VoidContainer と呼ばれ、もう 1 つは ReturnsContainer (または類似) と呼ばれます。しかし、これは私には少し物足りないようです...