假設我有這樣的:通過它鑄造派生並設置數據擴展基類
class Base {
public:
int a;
Base() : a(5) {}
};
template<class T>
class Derived : public Base {
public:
T value;
};
以下作品中的代碼,但我想知道什麼可以使用這種方法的挑戰:
Base * base = new Base;
Derived<int> * derived = static_cast<Derived<int>*>(base);
derived->value = 5;
Derived<String> * derived1 = static_cast<Derived<String>*>(base);
derived1->value = "test";
Derived<String> * newderived = static_cast<Derived<String>*>(base);
std::cout << newderived->value;
Derived<int> * newderived1 = static_cast<Derived<int>*>(base);
std::cout << newderived1->value;
//Output: test1
或者我怎樣才能以不同的,更安全的方式實現這樣的事情。我想通過5個函數傳遞一個類來處理它。
簡單的解決方案,因爲他們在c + +書籍編寫,大多是好的。我建議你從簡單的,基於繼承的,無模板的最小示例開始。試試這個,再次問我們,_that_有什麼問題。 – peterh
「作品」在這裏似乎有點誇大其辭。您正在覆蓋未分配的內存,這會在程序的某個稍後階段導致未指定但可能導致災難性的問題。 (嘗試使用valgrind獲取更多詳細信息。) – rici
代碼具有未定義的行爲,如果它對您有用,那是因爲您很不幸。 – john