我刚刚阅读了一本书“Practical C++ Metaprogramming”,它有以下示例,我无法编译。你能帮我解决这个问题吗?实用C++元编程
template <typename F>
struct make_tuple_of_params;
template <typename Ret, typename... Args>
struct make_tuple_of_params<Ret (Args...)>
{
using type = std::tuple<Args...>;
};
template <typename F>
using make_tuple_of_params_t = typename make_tuple_of_params<F>::type;
template<typename F>
void some_magic_function(F callable)
{
make_tuple_of_params_t<F> tuple;
/*
... do something with arguments in tuple...
*/
}
int main()
{
some_magic_function([] (int, double, float) {});
}
我得到一个编译错误说:“类型”没有任何直接或间接的基类的make_tuple_of_params'中的一员。它接缝像SFINAE不能按预期工作,因为默认结构被选中。我该如何解决?
一个lambda类型不是函数类型。 – aschepler
请记住,C++ 14中的lambdas可以有'auto'参数,这些参数显然可以被视为模板函子。对于这种lambda类型,你会期望你的元组类型看起来相似吗? –
上面没有SFINAE,只是专门化模板模式匹配 – Yakk