gpt4 book ai didi

c++ - 了解模板代码膨胀

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:59 25 4
gpt4 key购买 nike

我在阅读 Scott Meyers C++ 时遇到了所谓的代码膨胀 概念。他提供了一个如何通过继承减少它的示例:

template <typename T>
class SquareMatrixBase{
protected:
void invert(std::size_t matrixSize); // <------------ HERE
}

template <typename T, std::size_t n>
class SquareMatrix : private SquareMatrixBase<T>{
private:
using SquareMatrix<T>::invert;
public:
void invert(){ invert(n) }
}

现在,在项目摘要中他说

Templates generate multiple classes and multiple functions, so any template code not dependent on a template parameter causes bloat.

因此,在示例中我们有 SquareMatrixBase<T>::invert(std::size_t)这不依赖于模板参数。因此,它会导致代码膨胀。那不是我们试图消除的东西吗?我错过了什么?

最佳答案

So, in the example we have SquareMatrixBase<T>::invert(std::size_t) which is not dependent on the template parameter. So, it causes code bloat. Isn't that the thing we tried to eliminate? What did I miss?

没有。你错过了操作 invert对矩阵的执行将取决于 T , 所以有一个 invert 的实例是合适的对于每个 T .

对于 T 类型的每个组合都有一个实例化是可取的和矩阵大小 n ,这就是派生 SquareMatrix 的原因class - 以这两个参数为模板 - 遵从基类的实现。它实际上只是将矩阵大小常量作为运行时值注入(inject)。

关于c++ - 了解模板代码膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34647359/

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