【发布时间】:2017-04-13 14:03:07
【问题描述】:
我刚刚阅读了《实用 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) {});
}
我收到一条编译错误消息:“type”不是“make_tuple_of_params”的任何直接或间接基类的成员。由于选择了默认结构,因此 SFINAE 似乎无法按预期工作。我该如何解决这个问题?
【问题讨论】:
-
lambda 类型不是函数类型。
-
请记住,c++14 中的 lambda 可以具有
auto参数,这些参数显然可以被视为模板仿函数。对于这种 lambda,您希望您的元组类型看起来像什么? -
上面没有SFINAE,只是特化模板模式匹配
标签: c++ c++14 variadic-templates template-meta-programming