我正在尝试创建一个模板类,它将函数的返回类型和参数作为模板参数,例如: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 ++中是可能的,还是我做错了什么?
您需要声明主要的,不受约束的类模板,它定义了类所需的模板参数的数量:
template <class T>
class static_detour;
在您可以声明类模板的任何完整或部分特化之前,它只接受特定参数:
template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}
static_detour<T>
类型将指专业化,如果T
的形式为Result(Arguments...)
,对于某些Result
和Arguments...
,也就是说,如果对专业化的扣除成功。否则,它将引用主模板。