2012-06-02 35 views
1

是否可以做到這一點?動態改變一個類的模板參數

例如,考慮下面的代碼片段:

#include <iostream> 
using namespace std; 

template <typename T> class A { 
public: 
    void print() { 
    T var; 
    cout << sizeof(var) << endl; 
    } 
}; 

int main() { 
    A<int>* c = new A<int>; 
    c->print(); 

    A<char>* d = reinterpret_cast<A<char>*>(c); 
    d->print(); 
} 

是否有「危險」用這種初步實踐的?

回答

3

是的,這會調用未定義的行爲。 A<char>A<int>是完全不相關的類型。因此,重新解釋演員製作B也不例外。

實際上,它可能會起作用(至少對於這個簡單的東西)。但這並不意味着你可以依靠它。

1

這種實踐有沒有「危險」?

這是一個未定義的行爲,因爲你是一個指針轉換爲不同的類型,然後調用函數。
請記住,A<int>A<char>是不同的類型;不要因爲同名A而感到困惑。

Here是來自Bjarne Stroustrup的網頁的一篇很好的相關文章。

相關問題