如何实现模板函数与“subtemplated”

问题描述:

我有一个函数,该声明是如何实现模板函数与“subtemplated”

template<typename T> T get(int x); 

我想实现的是实现一个版本,其中的返回类型是一个模板类(又名计时:: time_point)

我试图

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

但是,这并不与申报相符。什么是正确的方法来做到这一点?

+0

从C++ 11开始,模板函数不能部分专用。我怀疑他们也可以使用C++ 14。 – 2014-10-17 18:53:48

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

但是,您可以通过traits/function对象类来路由函数模板以执行所需操作。

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); 
}