我有作爲派生類的基類的類模板。這個想法是通過CRTP技巧來利用「靜態多態」。派生模板類對象的實例化
#include <iostream>
template <typename T>
class BASE
{
public:
void write() {static_cast<T*>(this)->write(); }
};
class DER1 : public BASE<DER1>
{
public:
void write(){
std::cout << "Calling write() inside DER1 " << number << std::endl;}
private:
int number = 11;
};
我試圖2種不同實例派生類對象的方法,和,我發現的兩種方式之一是不正確的。但我不明白爲什麼。
int main(void) {
BASE<DER1> der1_objA ;
der1_objA.write();
DER1 der1_objB ;
der1_objB.write();
return 0;
}
事實上,我得到的輸出
Calling write() inside DER1 1880535040 [ random number]
Calling write() inside DER1 11 [correct number ]
可有人給我解釋一下其中的問題是什麼? 非常感謝您提前。
靜態投僅在實際上是基礎子對象... –
'BASE'實例中沒有'DER1'實例,但只有一個'BASE'試圖將自己投射到它不是的東西 –
user463035818
最後它是切片。 – user0042