我正在尝试创建一个模板类,该模板类将函数的返回类型和参数作为模板参数,例如: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 ++中有可能吗?还是我做错了什么?
答案 0 :(得分:3)
您需要声明 primary 不受限制的类模板,该模板定义了该类所需的模板参数的数量:
template <class T>
class static_detour;
之前,您可以声明类模板的任何完整或部分专业化,它们仅接受特定的参数:
template<typename Result, typename ... Arguments>
class static_detour<Result(Arguments...)>
{
}
如果对于某些static_detour<T>
和T
,Result(Arguments...)
的格式为Result
,即,如果针对专业化成功。否则,它将引用主模板。