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

问题描述 投票:-1回答:1

我正在尝试创建一个模板类,它将函数的返回类型和参数作为模板参数,例如: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 ++中是可能的,还是我做错了什么?

c++ templates variadic-templates
1个回答
3
投票

您需要声明主要的,不受约束的类模板,它定义了类所需的模板参数的数量:

template <class T>
class static_detour;

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

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

static_detour<T>类型将指专业化,如果T的形式为Result(Arguments...),对于某些ResultArguments...,也就是说,如果对专业化的扣除成功。否则,它将引用主模板。

© www.soinside.com 2019 - 2024. All rights reserved.