1
我想將類轉換爲模板,並且此類將不得不從類型名T訪問某些數據。在這種情況下,typename T可以是對象或指向對象的指針。如何在模板中告訴我是否正在處理指針或對象?將類轉換爲模板
我不能使用Boost。
我想將類轉換爲模板,並且此類將不得不從類型名T訪問某些數據。在這種情況下,typename T可以是對象或指向對象的指針。如何在模板中告訴我是否正在處理指針或對象?將類轉換爲模板
我不能使用Boost。
您將使用模板專業化。首先,您將創建模板,將模板參數視爲普通類型。
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;
有趣的...這些通常會進入相同的頭文件或將它們分開嗎? – Xavier 2012-07-11 23:40:54
@ Xavier:我通常在同一個頭文件中看到它們。如果分開,專門需要包含常規頭文件。 – jxh 2012-07-11 23:41:44
謝謝你好,先生! – Xavier 2012-07-11 23:43:07