有什麼東西我不明白我希望你注意下放,請檢查這些代碼片段:從基類的靜態鑄造衍生
template< typename DerivedClass >
class construction_management
{
city* this_city;
public:
construction_management()
{
this_city = static_cast< city* >(this);
}
~construction_management();
};
我刪除故意所有沒有必要的代碼,請看看這使this指針的靜態強制轉換爲類型「城市」,這是因爲下面定義的構造函數:
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轉換爲非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嗎?
謝謝大家。
我會說這*是* CRTP。您正在使用它自己的基礎創建派生類的模板實例。 AFAIK這是CRTP。 –