我有一些不清楚的地方希望引起您的注意,请检查这些代码片段:
template< typename DerivedClass >
class construction_management
{
city* this_city;
public:
construction_management()
{
this_city = static_cast< city* >(this);
}
~construction_management();
};
我故意删除了所有不必要的代码,请查看将“this”指针静态转换为“city”类型的构造函数,其定义如下:
class city : public construction_management< city >
{
public:
public:
city( const string& name, const string& owner );
};
该课程是故意为空的,因为我认为它可以包含的内容与此处无关。希望我无法 100% 理解这里发生的事情,g++ 4.7.2 在编译阶段不会打印警告或错误,每当我使用“this_city”指针时,我都可以访问城市的所有公共成员,对象本身看起来是一致的,因为所有变量都已正确初始化并始终包含有效数据。
我想知道的是,如果我将 construction_management 定义为普通的非模板类,为什么这段代码不起作用?由于临时从 const 到指向 city 的非 const 指针的转换,强制转换失败,为什么?
这是错误打印:
game.hpp: In constructor 'city_manager::construction_management::construction_management()':
game.hpp:164:41: error: invalid static_cast from type 'city_manager::construction_management* const' to type 'city_manager::city*'
如果 construction_management 是一个模板,为什么还要工作?这是一种 CRTP 吗?
谢谢你们。