2012-07-11 131 views
1

我想將類轉換爲模板,並且此類將不得不從類型名T訪問某些數據。在這種情況下,typename T可以是對象或指向對象的指針。如何在模板中告訴我是否正在處理指針或對象?將類轉換爲模板

我不能使用Boost。

回答

2

您將使用模板專業化。首先,您將創建模板,將模板參數視爲普通類型。

template <typename T> 
struct Foo { 
    T t_; 
    Foo() { std::cout << "regular version" << std::endl; } 
}; 

然後,當模板是指向類型的指針時,您將專門化該模板。

template <typename T> 
struct Foo<T *> { 
    T *t_; 
    Foo() { std::cout << "pointer version" << std::endl; } 
}; 

Foo<int> a; 
Foo<int *> b; 
+0

有趣的...這些通常會進入相同的頭文件或將它們分開嗎? – Xavier 2012-07-11 23:40:54

+0

@ Xavier:我通常在同一個頭文件中看到它們。如果分開,專門需要包含常規頭文件。 – jxh 2012-07-11 23:41:44

+0

謝謝你好,先生! – Xavier 2012-07-11 23:43:07