c++ - 部分模板绑定(bind),创建新模板作为类型

标签 c++ c++11 template-aliases

是否有某种方法可以将模板部分绑定(bind)到参数类型?例如,我有以下模板:

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

我有另一个模板,它接受模板类作为参数,期望能够使用第一种类型创建它的实例:

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

这将接受一个简单的模板,例如 template<typename T>无需更改。我现在想做的是部分绑定(bind)generic模板,仅指定 Q并将其传递给wrapper 。编写一些语法,也许是这样的:

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

我知道我几乎可以使用继承得到我想要的东西:

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

我希望避免这种情况,因为它会导致基类中定义的构造函数和运算符出现问题。

最佳答案

在 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
};

Live Example .

关于c++ - 部分模板绑定(bind),创建新模板作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18057750/

相关文章:

c++ - 是否可以直接接受 `std::bind` 的输出作为值,而不转换为 std::function?

c++ - 从 boost spirit x3 解析器返回的 vector 中的空字符串

c++ - 类型到值元函数可以用作 C++14 中的变量别名吗?

c++ - 模板别名的标识

c++ - C++11 中无开销的别名模板最佳替代方案的专门化

c++ - 如何将静态 Stasm 库链接到我的程序?

C++:使用数组创建函数

c++ - 无法将大的无符号整数正确写入二进制文件 - C++

c++ - 我如何将 std::get 作为参数传递给模板函数?

c++ - try catch finally construct - 它是在 C++11 中吗?