template<typename T>
struct toFunc;
template<typename...T>
struct toFunc<std::tuple<T...>>
{
using type = std::function<void(T...)>;
};
int main(int argc, char **argv) {
using t = std::tuple<int, int, int>;
using func = toFunc<t>::type;
auto f = func([](int a, int b, int c){std::cout << a << b << c << std::endl;});
f(1, 2, 3);
return 0;
}
toFunc typetraitは、タプルを関数型に変換します。あなたがそれを望むかどうかは分かりません。あなたは多分 http://en.cppreference.com/w/cpp/utility/apply
を探すために必要とするか、またはあなたがこの実装を使用することができます引数で呼び出したい場合:
namespace detail
{
template <unsigned int N>
struct for_each_t_idx
{
template <template<std::size_t> class Functor, typename... ArgsT>
static void exec(const std::tuple<ArgsT...>& t, Functor<N> func)
{
for_each_t_idx<N - 1>::exec(t, func);
func<N - 1>(t);
}
};
template <>
struct for_each_t_idx<0>
{
template <template<std::size_t> class Functor, typename... ArgsT>
static void exec(const std::tuple<ArgsT...>& t, Functor<0> func)
{
}
};
}
template <template<std::size_t> class Functor, typename... ArgsT>
void for_each_idx(const std::tuple<ArgsT...>& t, Functor<sizeof...(ArgsT)> func)
{
detail::for_each_t_idx<sizeof...(ArgsT)>::exec(t, func);
}
これは、タプルの各要素に対して与えられた関数を呼び出します。
はコンパイル時に知られている 'numArgument'のですか? –
これは動的に行うことはできません。これはコード生成を伴いますが、静的に生成することも、静的に生成することもできます。 add_operationのタイプは何ですか? – user1937198
@DavideSpataro - いいえ、numArgumentは実行時に定義されます。 –