Boost の signal2 ライブラリは、その拡張機能の一部について代替パラメータを渡すための優れた方法を定義しています (そのパラメータ ライブラリを介して)。これらの代替パラメーターの 1 つが私のコードでかなり一般的である場合、使用をさらに簡素化するヘルパーを作成したいと思います。たとえば、別のミューテックス タイプを指定するには、次のようにします。
namespace bs2 = boost::signals2;
template<typename Signature>
struct my_signal
{
typedef typename bs2::signal_type<Signature,
bs2::keywords::mutex_type<my_mutex> >::type type;
};
my_signal<void ()>::type some_signal;
残念ながら、これを行うことで、冗長な構文に戻ったり、 my_signal_with_combiner などの追加のメタ関数を定義したりすることなく、他のシグナルパラメーター (コンバイナータイプなど) の代替値を指定する機能も「失って」しまいました (これはばかげているようです)。 . コンバイナーのデフォルトでは、戻り値の型を取得するために署名を分解する必要があるため、デフォルトのテンプレートパラメーター値でもそれを行うことはできないと思います。(もちろん、理想的には、コンバイナーだけでなく、他のパラメーターのいずれかで機能するものが欲しいです。)
したがって、「本当の」質問は次のとおりです。それと同じように動作するが、パラメーターの1つに異なるデフォルト値を持つsignal_typeのようなものを定義する(簡単な)方法はありますか?(理想的には、Boost.Signals2 が将来さらにパラメーターを追加する場合、変更する必要はありません。)
(また、C++11 は使用しないでください。まだ古いコンパイラを使用しています。)