通过继承减少模板膨胀

ben*_*itj 10 c++ inheritance templates code-generation

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

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

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& );
    //...

};
Run Code Online (Sandbox Code Playgroud)

我应该保持最大的性能,同时减少编译时间

我也想知道为什么stl实现不使用这种方法

感谢您的反馈

Mar*_*k B 1

我认为这是一个不成熟的优化。一般来说,除了嵌入式系统之外,磁盘空间和内存充足且便宜,因此没有理由尝试针对少量代码空间进行优化。通过将所有内容都保留在模板代码中,可以使正在发生的事情更加明显,而不是使用会使事情变得复杂的继承。

此外,大多数应用程序不会生成数百个实例化,并且对于每个 T ,并非可以使用所有方法,从而进一步减少代码占用量。

只有当存在极其严格的内存考虑(嵌入式)时,我才会考虑不同的可能方法(包括您提出的方法)。

编辑:我不确定在一些标准容器案例中会有多大收获,因为它们仍然需要大量模板代码。对于只有少量模板特定代码和大量通用逻辑的内部类,这肯定有助于生成代码和编译速度。我怀疑它不经常使用,因为它更复杂并且好处仅限于某些场景。

  • @Stephen:这正是使用这种方法不会发生的情况。容器中的大部分复杂性在于在适当的时间调用构造函数和析构函数,而这只能在完全定义所包含类型的模板代码中完成。 (2认同)