无法在C ++中创建类似函数的模板

时间:2018-09-13 19:20:52

标签: c++ templates variadic-templates

我正在尝试创建一个模板类,该模板类将函数的返回类型和参数作为模板参数,例如:new static_detour<int(const char*, int)>()

因为这与我们在std函数模板中可以看到的语法相同,所以我尝试复制在function.h中找到的相同结构,所以到目前为止,这是我的课程:

template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}

但是,这不起作用,当我尝试使用.cpp文件中的文件时,编译器将抛出error C2988: unrecognizable template declaration/definition。我可以将<>编译后的类名删除,但不能使用Arguments参数。

在C ++中有可能吗?还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要声明 primary 不受限制的类模板,该模板定义了该类所需的模板参数的数量:

template <class T>
class static_detour;

之前,您可以声明类模板的任何完整或部分专业化,它们仅接受特定的参数:

template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}

如果对于某些static_detour<T>TResult(Arguments...)的格式为Result,即,如果针对专业化成功。否则,它将引用主模板。