我有这个:
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) );
}
我的编译错误是:
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
答案 0 :(得分:6)
不幸的是,template
类中的template
方法不能仅基于方法的template
参数进行专门化。
您需要专门化template class
。换句话说,成员方法专业化应该是{strong>完全专业化,相对于class template
(即<T,U>
)参数以及成员template
参数(即<size_t>
)。
例如,您可能需要专门化这样的事情(demo):
template<> // <------ you have to specialize class also
template<>
inline void A<int, double>::BindValues<1>() // <-------- see A<T,U>
{
...
}
答案 1 :(得分:3)
您要做的是对函数进行部分模板特化,这是不允许的。
您可以在N
上定义模板功能,以获取A的模板特化(例如A<int, int>::BindValues<N>()
),但不允许使用其他方式。