在C ++中抛弃模板参数是否安全?

时间:2012-01-17 21:44:22

标签: c++

我正在使用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();
}

那么,自我投射是否不可靠?它似乎有效,但也许这只是因为我对我的特定编译器很幸运。

1 个答案:

答案 0 :(得分:4)

不,Child<Empty>Parent是不相关的,不兼容的类型。如果它有效,你确实很幸运。

好消息是你真的不需要进行演员表演。应该有很简单的方法来完成你想要做的任何事情。