gpt4 book ai didi

c++ - 所有与模板化类型交互的代码都必须使用模板吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:38 24 4
gpt4 key购买 nike

所有与模板类交互的代码都必须使用模板吗?

想象

template<T>
class Data {
public:
Data(T value) {
this->value = value;
};
T getValue() {
return value;
};
virtual size_t size() = 0;
private:
T value;
};

对于几种可能的T(String、int等),会有size()的具体实现。

注意:我可以有一个抽象类,但那样我就不能既没有构造函数/getValue 也没有虚拟方法,因为我必须指定它们的参数/返回值类型。

进一步想象我有这样的功能

template<T>
size_t getSize(Data<T> value) {
return value.size();
}

尽管 size() 对每个不同的类型都是不同的,发送者(getSize() 方法)不应该关心 T.

那么问题是为什么需要对函数进行模板化,我可以避免吗?

最佳答案

Must all code interacting with templated classes also use templates?

是的。请注意,您拥有的是 class template这是表达类族的一种方式。它不会上课。您可以通过使用类似 Data<int> 的类型实例化模板来做到这一点将淘汰 Data 的一个版本其中 T是一个整数。

why is it necessary to template the function

原因是一个Data<int>和一个 Data<double不是同一个类(class)。就像一个 intdouble不同,当用不同的模板参数实例化类模板时,你会得到不同的类。因此,如果您想要一个可以处理类模板可以生成的任何内容的函数,那么该函数也需要是 f unction template。所以它可以为每个不同的Data剔除一个函数即产生。

and can I avoid it

你可以做的一件事是拥有 Data从基类派生然后移动size进入基类。然后您可以编写函数来接受对基类而不是类模板的引用。

关于c++ - 所有与模板化类型交互的代码都必须使用模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289462/

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