【发布时间】:2017-06-06 16:25:05
【问题描述】:
以下是“实用 C++ 元编程”(第 16/17 页)的示例:
#include <tuple>
#include <typeinfo>
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 f)
{
// if F is in the form void(double*, double*)
// make_tuple_of_params is std::tuple<double*, double*>
make_tuple_of_params_t<F> params;
// ...
}
void Foo(double* x, double* y) { }
int main()
{
some_magic_function(Foo);
}
编译失败:
$ clang++ -std=c++14 MakeTuple.cpp
MakeTuple.cpp:14:5: error: implicit instantiation of undefined template 'make_tuple_of_params<void (*)(double *, double*)>'
这是因为 make_tuple_of_params 的非专用版本(上面代码的第 4 行和第 5 行)没有定义吗?
【问题讨论】:
标签: c++ metaprogramming template-meta-programming