在C++中丢弃模板参数安全吗

Is it safe to cast away template arguments in C++?

本文关键字:参数 安全 C++      更新时间:2023-10-16

我在玩C++中模板参数的继承。我有一个儿童班和一个家长班。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();
}

那么,自我铸造不可靠吗?它看起来是有效的,但也许这只是因为我很幸运有了特定的编译器。

否,Child<Empty>Parent是不相关、不兼容的类型。如果它起作用,你确实只是运气好。

好消息是,你真的不需要做那个演员。应该有非常简单的方法来完成你想要做的任何事情。