我正在使用C ++中的模板参数继承。我有一个Child课程和一个Parent课程。 Parent类尝试将自身强制转换为Child类。虽然这确实可以编译并且似乎有效,但我想知道它是否安全。这是代码:
class Empty { };
template<class T> class Child : public T
{
public:
void do_something() { /* ... */ }
};
class Parent
{
public:
void go_crazy()
{
Child<Empty> & self_as_child = *((Child<Empty> *)this);
self_as_child.do_something();
}
}
void main()
{
Child<Parent> c;
c.go_crazy();
}
那么,自我投射是否不可靠?它似乎有效,但也许这只是因为我对我的特定编译器很幸运。
答案 0 :(得分:4)
不,Child<Empty>
和Parent
是不相关的,不兼容的类型。如果它有效,你确实很幸运。
好消息是你真的不需要进行演员表演。应该有很简单的方法来完成你想要做的任何事情。