2

テンプレートをパラメーター型に部分的にバインドする方法はありますか? たとえば、次のテンプレートがあります。

template<typename T, typename Q> struct generic { };

そして、テンプレートクラスをパラメーターとして受け取る別のテンプレートがあり、最初のタイプでそのインスタンスを作成できることを期待しています:

template<typename T, template<typename> class Impl>
struct wrapper {
    Impl<T> foo;
};

これは、変更なしのような単純なテンプレートを受け入れtemplate<typename T>ます。私が今やりたいことは、genericテンプレートを部分的にバインドし、それのみQを指定して に渡すことwrapperです。おそらく次のような構文を作成します。

template<typename T> bound = generic<T,some_type>;

継承を使用して、必要なものをほとんど取得できることを知っています。

template<typename T> bound : public generic<T,some_type> { };

ただし、基本クラスで定義されたコンストラクターと演算子で問題が発生するため、これを回避したいと考えています。

4

1 に答える 1

4

C++11 では、テンプレート エイリアスを使用できます

template<class X>
using Bind_CPP11 = generic<X, Y>;

template<class X, template<class> class Impl>
struct wrapper_CPP11
{
    Impl<X> foo;
};

C++98/03 では、単純なクラス構成を使用できます(ここでは継承を使用しません)。

template<class X>
struct Bind_CPP03
{
    typedef generic<X, Y> type;
};

template<class X, template<class> class Impl>
struct wrapper_CPP03
{
    typename Impl<X>::type foo;
//  ^^^^^^^^ to extract dependent type
};

ライブの例

于 2013-08-05T12:29:50.513 に答える