gpt4 book ai didi

c++ - 推断模板参数类型、模板类与模板函数

转载 作者:行者123 更新时间:2023-11-28 05:43:25 26 4
gpt4 key购买 nike

我已经为具有指针对象的集合定义了一个删除器,但是当我以下面的方式定义时它不起作用并且说在函数“int main()”中:41:43: 错误:在“(”标记之前缺少模板参数在/usr/include/c++/4.9/set 包含的文件中:那是我使用 Deleter 的行

template <typename T>
struct Deleter
{
void operator () (T *ptr)
{
delete ptr;
}
};

但是当我如下所示更改模板声明的位置时,它开始工作了。

struct Deleter1
{
template <typename T>
void operator () (T *ptr)
{
delete ptr;
}
};

谁能解释一下到底有什么区别。因为当我们声明一个具有模板变量的类甚至具有模板参数的函数时,我们在类定义之前声明了模板声明。

最佳答案

当您使用函数模板时,编译器通常可以从调用函数的方式判断模板参数必须是什么。所以在这样的通话中

Deleter1 d1;
int *ip = new int;
d1(ip);

编译器推断 Tint

对于使用第一个的相应代码,您将编写

Deleter d;
int *ip = new int;
d(ip);

请注意,在 d 的定义点,编译器无法知道 d() 将使用 int*.

关于c++ - 推断模板参数类型、模板类与模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36682445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com