2012-07-11 111 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