我有一个模板类,它是一个数据结构,如果放入数据结构的数据是否是指针,那么除了其中一个函数之外的所有函数都应该表现相同。但是,当我想对数据结构中的数据进行排序时,我希望函数的行为不同,无论它是否是指针。我是否必须重新实现整个类作为指针的模板特化,或者我可以实现两个友元函数进行排序,编译器将根据输入是DataStructure<T>
还是DataStructure<T*>
来选择合适的函数?如果是后者我应该怎么做呢。
答案 0 :(得分:0)
无论哪种方式都有效。 我相信只复制排序函数会更容易。 这是一个例子。希望它有所帮助。
#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;
}