gpt4 book ai didi

c++ - 为什么模板 typedef 是 C++(不是 C++11)中的一个问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:23 24 4
gpt4 key购买 nike

this question OP 要求提供模板 typedef 的解决方案,这在 C++ 中是不可能的。 OP 自己也提出了一个解决方案,但不喜欢它:

template<size_t N, size_t M>
class Matrix {
// ....
};

// Problem - will not compile
typedef Matrix<N,1> Vector<N>;

// Solution
template <int N>
class Vector: public Matrix<N,1>
{ };

我的问题是,Helper::type solution 有什么优势?给我们 OP 的解决方案(假设这些类永远不会被基指针或 new 这样使用)?一个空类在发布时应该没有开销(或者是吗?)。我能看到的唯一缺点是,在调试构建中,您必须在调试时扩展基类。

编辑:除了选定的答案外,请参阅@Dani 的答案,他建议继承的版本需要定义构造函数,这会增加不便。

最佳答案

typedef 的要点是定义一个类型别名。子类不是类型别名——它是一种新类型。

例如,想象一些库函数

template<size_t N, size_t M>
Matrix<N, M> * createMatrix();

现在有了助手类型

Vector<3>::type * var = createMatrix<3, 1>();

是合法的。
具有继承性

Vector<3> * var = createMatrix<3, 1>();

不是。

关于c++ - 为什么模板 typedef 是 C++(不是 C++11)中的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622127/

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