gpt4 book ai didi

c++ - 在 C++ 模板特化中添加基类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:50 30 4
gpt4 key购买 nike

在我处理的代码库的尘土飞扬的角落里,我遇到了一个看起来像这样的类层次结构:

class Base1
{
int base1;
};

class Base2
{
int base2;
};
template <typename T> class A : public Base1
{
T _specialT;
};
template <> class A<int> : public Base2
{
int _special;
};

在 A 的特化中使用 Base2 令我感到惊讶。我一直在四处寻找以准确理解它的含义,但未能找到此类设计的任何示例或讨论。

在我看来,这样做会导致 A 从 Base1 和 Base2 继承,而 A 的其他非特化用途将仅从 Base1 继承。这给我留下了几个问题:

  1. 我的理解正确吗?
  2. 是否有任何不明显的注意事项以这种方式添加到层次结构中?你为什么要这样做?
  3. 有时这会被认为是好的设计吗?

最佳答案

  1. 没有。初级类模板继承自Base1并且只有 <int>特化继承自 Base2 (仅来自 Base2)。

不知道 this 使用的上下文,我无法回答 2. 或 3.

您经常可以在模板元编程中看到从不同类型派生的特化。例如:

template<typename T, typename U>
struct is_same : std::false_type {};

template<typename T>
struct is_same<T,T> : std::true_type {};

这是完全正确的做法。这是否是一件好事完全取决于所解决的问题。

关于c++ - 在 C++ 模板特化中添加基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227993/

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