是否有某种方法可以将模板部分绑定到参数类型?例如,我有以下模板:
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> { };
我希望尽管避免这种情况,因为它会导致基类中定义的构造函数和运算符出现问题。
答案 0 :(得分: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中,你可以使用简单的class composition(我不会在这里使用继承)
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
};