C ++模板类专业化

时间:2018-03-30 17:47:01

标签: c++ templates pointers visual-c++ template-specialization

我有一个模板类,它是一个数据结构,如果放入数据结构的数据是否是指针,那么除了其中一个函数之外的所有函数都应该表现相同。但是,当我想对数据结构中的数据进行排序时,我希望函数的行为不同,无论它是否是指针。我是否必须重新实现整个类作为指针的模板特化,或者我可以实现两个友元函数进行排序,编译器将根据输入是DataStructure<T>还是DataStructure<T*>来选择合适的函数?如果是后者我应该怎么做呢。

1 个答案:

答案 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;
}