具有多重继承C++ dynamic_cast
C++ dynamic_cast with multiple inheritance
可以使用多重继承通过dynamic_cast获取对象吗?由于我遇到的设计问题,我更喜欢跳过构图技巧。谢谢
#include <stdio.h>
namespace
{
template <typename T>
class Beta
{
protected:
Beta() { printf("Betan"); }
public:
virtual ~Beta() { printf("~Betan"); }
virtual void Run() = 0;
};
class Alpha
{
protected:
Alpha() { printf("Alphan"); }
public:
virtual ~Alpha() { printf("~Alphan"); }
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++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- C++类中的二维"dynamic"数组?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- protobuf in C++ with dynamic binding for google::protobuf::M
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- "The ordinal 344 could not be located in the dynamic link library"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- Dynamic Cast C++ Fail
- dynamic-cast-c++dynamic_cast错误处理