c++ - 可变参数模板上的变换算法

标签 c++ templates c++11 variadic-templates template-meta-programming

我正在使用 C++11,我需要像 transform(容器的 STL 算法)这样的东西来转换 template<typename ...T > 进入 <typename ...T::something>所以我可以用它来继承:

例如:

template<typename T>
struct typeOf{
   using type = T;
};

template<typename ...T> // All the arguments must be `typeOf`'s
class tupleOf : tuple<T::type...>{
}

这样:

tupleOf<typeOf<int>,typeOf<char>>会给我一个tuple<int,char>

我想在不使用 C++14 功能的情况下执行此操作

最佳答案

你可以这样做:

template <typename T, template <typename> class f>
struct transform;


template <template <typename...> class C, typename...Ts, template <typename> class f>
struct transform<C<Ts...>, f>
{
    using type = C<typename f<Ts>::type...>;
};

和用法:

static_assert(std::is_same<std::tuple<char, int>,
                           transform<std::tuple<char*, int*>, 
                                     std::remove_pointer>::type>::value,
              "unexpected");

Live Demo .

关于c++ - 可变参数模板上的变换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863332/

相关文章:

c++ - 暴露所包含小部件的信号/插槽的正确 Qt 习惯用法是什么?

c++ - 如何从 if 语句中获取类模板的实例? (C++)

c++ - std::remove_if - lambda,不从集合中删除任何内容

c++ - 在不更改成员范围的情况下有条件地启用静态成员

c++ - 异常安全示例保证正确吗?

c++ - eclipse中的交叉编译器前缀和路径

C++ 语句无法解析重载函数的地址

c++ - 模板模板参数 - 类型/值不匹配错误

c++ - 将参数传递给模板函数的方法

c++ - 使用 std::tie 进行类似 golang 的错误处理同时返回结果是否有缺点? (C++11)