【问题标题】:C++ Template Class SpecializationC++ 模板类专业化
【发布时间】:2018-03-30 17:47:00
【问题描述】:
我有一个模板类,它是一个数据结构,如果放入数据结构的数据是指针或不是指针,除了其中一个函数之外的所有函数都应该表现相同。但是,当我想对数据结构中的数据进行排序时,我希望函数的行为不同,无论它是否是指针。我是否必须将整个类重新实现为指针的模板特化,或者我可以只实现两个用于排序的友元函数,编译器将根据输入是DataStructure<T> 还是DataStructure<T*> 来选择正确的函数?如果是后者,我该怎么做呢。
【问题讨论】:
标签:
c++
templates
pointers
visual-c++
template-specialization
【解决方案1】:
任何一种方式都有效。
我相信只复制排序功能会更容易。
这是一个例子。希望对您有所帮助。
#include<iostream>
using namespace std;
class Sorter
{
public:
template <typename T>
typename std::enable_if<std::is_pointer<typename T::type>::value, void>::type
sort(T & data)
{
cout<<"sort pointers\n";
}
template <typename T>
typename std::enable_if<!std::is_pointer<typename T::type>::value, void>::type
sort(T & data)
{
cout<<"sort non pointers\n";
}
};
template<typename T>
class DataStructure
{
public:
using type = T;
};
int main() {
Sorter s;
DataStructure<int> d1;
DataStructure<int*> d2;
s.sort(d1);
s.sort(d2);
return 0;
}