gpt4 book ai didi

具有多重继承的 C++ dynamic_cast

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

是否可以使用多重继承通过 dynamic_cast 获取对象?由于我的设计问题,我更喜欢跳过组合技巧。谢谢,

#include <stdio.h>

namespace
{
template <typename T>
class Beta
{
protected:
Beta() { printf("Beta\n"); }
public:
virtual ~Beta() { printf("~Beta\n"); }
virtual void Run() = 0;

};

class Alpha
{
protected:
Alpha() { printf("Alpha\n"); }
public:
virtual ~Alpha() { printf("~Alpha\n"); }
virtual void Check() = 0;

template <typename T>
Beta<T>* GetBeta()
{
Beta<T>* b = dynamic_cast< Beta<T>* >(this);

if(b == NULL) printf("NULL !!\n");

return b;
}
};

template <typename T>
class Theta : public Alpha, Beta<T>
{
public:

void Run()
{
printf("Run !\n");
}

void Check()
{
printf("Check !\n");
}

};
}

int main(int argc, const char* argv[])
{
Alpha* alpha = new Theta<int>();
Beta<int>* beta = alpha->GetBeta<int>();

alpha->Check();

if(beta) beta->Run();

delete alpha;
return 0;
}

上面代码的结果是

阿尔法测试版无效的 !!查看 !~测试版~阿尔法

最佳答案

好吧,如果我替换:

public Alpha, Beta<T>

与:

public Alpha, public Beta<T>

事情会成功的。细节总是有魔鬼......

关于具有多重继承的 C++ dynamic_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18877416/

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