gpt4 book ai didi

c++ - 通过继承减少模板膨胀

转载 作者:可可西里 更新时间:2023-11-01 16:40:07 24 4
gpt4 key购买 nike

有没有人有通过继承减少模板代码膨胀的经验?

我对以这种方式重写我们的容器犹豫不决:

class vectorBase
{
public:
int size();
void clear();
int m_size;
void *m_rawData;
//....
};

template< typename T >
class vector : public vectorBase
{
void push_back( const T& );
//...

};

我应该在减少编译时间的同时保持最佳性能。我也想知道为什么标准库实现不使用这种方法。

最佳答案

如果您不知道存储的元素是什么类型,那么对 vector 的操作只有很少的一部分是有意义的。例如,您添加到基类的 clear() 方法需要调用从 vector 中删除的元素的析构函数,因此它需要知道它们的类型并需要进行模板化。

在不知道里面的东西类型的情况下,你可以用 void *m_rawData 做很多事情,基本上对它的所有操作至少都必须知道存储的大小类型。我唯一能想到的是,如果您知道它不包含任何元素(如果它包含您必须调用它们的析构函数的元素),您可以 free() 它。如果您不知道各个元素的开始和结束位置,则分配、设置和访问元素都不起作用。此外,如果 m_rawData 是正确类型的 T*,那么所有方法的实现都会更加清晰和简单。

基类中的 size() 方法只有在其唯一工作是返回一个 m_size 成员变量时才有效,但 vector 不一定必须显式存储大小(我知道的实现没有)。您可能会实现 is 以便显式存储大小,但是 size() 可能不是一个需要很长时间编译的方法,即使它是模板化的也是如此。

总而言之,我不认为还有很多方法可以在基类中实现。 vector 上的大多数操作都需要了解其中存储的元素。

关于c++ - 通过继承减少模板膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037408/

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