C++ 模板类成员函数的显式专门化

C++ 模板类成员函数的显式专门化,c++,class,templates,function,specifications,C++,Class,Templates,Function,Specifications,我有这个: 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<

我有这个:

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) );
}
模板
甲级
{
模板
void BindValues();
}
模板
模板
内联void A::BindValues()
{
conn->setValue(std::get(m_Tuple));
绑定值(conn);
}
模板
模板
内联void A::BindValues()
{
conn->setValue(std::get(m_Tuple));
}
我的编译错误是:

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
“>”标记之前的显式专门化
无效
封闭类模板不是显式专门化的
void A::BindValues()的模板id BindValues与任何模板声明都不匹配

您尝试对函数进行部分模板专门化,这是不允许的


您可以在
N
上为a的模板专门化定义模板函数(例如
a::BindValues()
),但不允许使用相反的方法。

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

还需要专门化
模板类
。换句话说,成员方法专门化应该是关于
类模板
(即
)参数以及成员
模板
参数(即
)的完全专门化

例如,您可能需要专门化以下内容():


template/@russellsayshi,即使我也没有任何逻辑解释。一种可能性是降低C++语法分析器的复杂性,因为这种特性可能不经常使用。
template<>  // <------ you have to specialize class also
template<>
inline void A<int, double>::BindValues<1>()  // <-------- see A<T,U>
{
    ...
}