【发布时间】:2014-11-25 14:51:06
【问题描述】:
假设我有一个std::function,它以T 类型的N 参数作为输入(这可以使用一些元编程魔法来构造;见下文),其中N 是一个模板参数强>。我想std::bind 第一个参数来构造一个带有N-1 参数的函数(例如myBind<...>(someValue))。我想不出一个聪明的元编程技巧来做到这一点。有什么建议吗?
来自Lambda function with number of arguments determined at compile-time:
您可以编写带有嵌套
typedef类型的模板n_ary_function。这种类型可以如下使用:template <int N> class A { typename n_ary_function<N, double>::type func; };遵循
n_ary_function的定义:template <std::size_t N, typename Type, typename ...Types> struct n_ary_function { using type = typename n_ary_function<N - 1, Type, Type, Types...>::type; }; template <typename Type, typename ...Types> struct n_ary_function<0, Type, Types...> { using type = std::function<void(Types...)>; };
【问题讨论】:
-
你能发布你的代码来构建
function吗? -
@PiotrS.:我已将代码放入问题中。
标签: c++ c++11 metaprogramming template-meta-programming