簡體   English   中英

模板類成員函數的顯式特化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM