c++ - 转换元组类型

标签 c++ boost c++11 metaprogramming

所以我是 boost MPL 的新手,我不知道如何将它与标准类型一起使用。

我想要一个隐藏此类型的元函数:

std::tuple<T0, T1, ..., TN>

进入此:

std::tuple<
  std::function<T0(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>,
  std::function<T1(std::tuple<T0, T1, ...>, std::tuple<T0, T1, ...>)>,
  ...,
  std::function<TN(...)>
>

这似乎可以用 transform 来完成,但我想要一个元组类型,而不是类型 vector 。 (实际上不必使用MPL,但我想它会更短?)

背景:目前我使用完全泛型类型,如果使用错误,就会完全崩溃,但我想计算 TupleOfFunctions 以获得正确的错误。

template<class TupleOfValues, class TupleOfFunctions>
void f(TupleOfValues v, TupleOfFunctions fun)

最佳答案

下面这个怎么样?

template<typename T> struct transform;
template<typename ...T>
struct transform<std::tuple<T...>> {
  typedef std::tuple<std::function<T(std::tuple<T...>, std::tuple<T...>)>...> type;
};

关于c++ - 转换元组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123712/

相关文章:

sockets - gethostbyname()(实际上,Boost Asio resolve())完全在2小时(120分钟,7200秒)后发生段故障

C++ 2011:std::thread:并行化循环的简单示例?

C++11 并行化 : bottleneck in Armadillo's set_seed_random()

C++成员变量在构造函数后丢失值

C++ 对象被向上转换为基类;不能调用派生方法

c++ - 有没有办法不继承子类中函数的 "virtualness"?

c++ - 不是 lambda 函数中的常量表达式

c++ - 为什么在 iterator_facade 中会出现编译错误,具体取决于我放置 Boost header 的位置?

C++11 for 循环语法不能正常工作

c++ - 重载模板函数的 std 绑定(bind)