gpt4 book ai didi

c++ - 强制实例化派生类型而不是基类型

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:41 25 4
gpt4 key购买 nike

假设我们有以下给定代码:

class T; // with T::~T is virtual
class S;
class E {
void foo() {
/* ... */
S s;
T* t = new T(s);
/* ... */
delete t;
/* ... */
}
};

我们不能改变E .

假设现在我们有:

class S;
class A {
class T : public ::T {
T(S);
}
};

有没有任何方式(在 C++03 中!)我们可以强制 E实例化 A::T而不是 ::TE::foo , 不改变 E::foo 的实现或 E一般情况下?

注意:如果确实需要,可以制作E从我们指定的东西继承(例如 A ),但我不想这样做。


一般注意事项:是的,这听起来像是一个设计缺陷,但我有意识地决定将一小部分集成代码稍作修改,以便所有其他(更大!)部分可以完美独立并且经过精心设计。

最佳答案

有两个答案适用 - 不可否认,这两个答案都超出了您问题的范围:

1。模板化

template <typename T>
class E {
void foo() {
/* ... */
S s;
T* t = new T(s);
/* ... */
delete t;
/* ... */
}
};

现在,从技术上讲,这没有改变 E::foo 的实现...(如果你愿意,它只是定义了一个更通用的实现)。

2。 邪恶的

即使在一些最不利的情况下,也能发挥作用的真正愚蠢的方法:

#define T A::T   // I didn't **recommend** this; it is just _a way_

关于c++ - 强制实例化派生类型而不是基类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288170/

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