【问题标题】:C++ Template Class SpecializationC++ 模板类专业化
【发布时间】:2018-03-30 17:47:00
【问题描述】:

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

【问题讨论】:

  • 有了足够现代的编译器,你可以使用constexpr if。除此之外,将方法委托给辅助类模板,然后部分专门化该模板。

标签: 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;
}

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多