模板类成员函数的显式特化

Beh*_*z.M 7 c++ templates specifications class function

我有这个 :

template<class T, class U>
class A
{
    template<size_t N>
    void BindValues();
}

template<class T, class U>
template<size_t N>
inline void A<T, U>::BindValues()
{
    conn->setValue<N-1>( std::get<N-1>(m_Tuple) );
    BindValues<N-1>(conn);
}

template<class T, class U>
template<>
inline void A<T, U>::BindValues<1>()
{
    conn->setValue<0>( std::get<0>(m_Tuple) );
}
Run Code Online (Sandbox Code Playgroud)

我的编译错误是:

invalid explicit specialization before '>' token
enclosing class templates are not explicitly specialized
template-id BindValues<1> for void A<T, U>::BindValues() does not match any template declaration
Run Code Online (Sandbox Code Playgroud)

iam*_*ind 6

不幸的template是,template类中的方法不能仅基于template方法的参数进行专门化.

需要专门的template class.换句话说,成员方法专业化应该是关于(即)参数以及成员参数(即)的完全专业化.class template<T,U>template<size_t>

例如,您可能需要专门化这样的东西(演示):

template<>  // <------ you have to specialize class also
template<>
inline void A<int, double>::BindValues<1>()  // <-------- see A<T,U>
{
    ...
}
Run Code Online (Sandbox Code Playgroud)