[英]explicit specialization of template class member 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) );
}
我的編譯錯誤是:
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
遺憾的是, 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>
{
...
}
您要做的是對函數進行部分模板特化,這是不允許的。
您可以在N
上定義模板函數以獲取A的模板特化(例如A<int, int>::BindValues<N>()
),但不允許相反的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.