如何使用" subtemplated"来实现模板化功能

时间:2014-10-17 18:44:00

标签: c++11 c++14

我有一个声明

的功能
template<typename T> T get(int x);

我想要实现的是实现一个返回类型是模板类的版本(a.k.a chrono :: time_point)

我试过

template<typename clock> std::chrono::time_point<clock> get(int x) {
  // implementation
}

但这与声明不符。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

你不能部分专门化一个功能。

但是,您可以通过特征/函数对象类来路由函数模板,以执行您想要的操作。

namespace details {
  template<class T>
  struct get {
    T operator()(int x) {
      // code
    }
  };
  template<class clock>
  struct get<std::chrono::time_point<clock>> {
    using T = std::chrono::time_point<clock>;
    T operator()(int x) {
      // code
    }
  };
}
template<class T> T get(int x) {
  return details::get<T>{}(x);
}