簡體   English   中英

通過模板參數具體化的類型的模板專業化

[英]Template specialization for type concretized by template parameter

首先,我很抱歉這個問題的標題,但是很難描述。 如果我想對A所有實例化進行專門Resolve ,那么下面的兩個是有效的語法?
1)

template<uint32_t I> struct A {};

template<typename> struct Resolve;

template<uint32_t I>
struct Resolve<A<I>>
{
    void f() { printf("im here!\n"); }  
};

2)

template<uint32_t I> struct A {};

template<typename> struct Resolve;

template<>
template<uint32_t I>
struct Resolve<A<I>>
{
    void f() { printf("im here!\n"); }  
};

還是template<>可選的? SO有兩個不同的答案:“ 這里”和“ 這里”
另外,請盡可能提供標准報價。

選項2)不能在MSVC上編譯,但至少可以在某些版本的GCC上編譯。

這是對的:

template <uint32_t I>
struct Resolve<A<I>>
{ };

語法template <>用於引入顯式的專業化 (類模板,函數模板等)(請參閱[temp.spec] / 3[temp.expl.spec] / 1 )。 但是我們正在嘗試做部分專業化 部分專業化仍需要引入模板參數,而顯式專業化則不需要。

另一方面,如果我們要專門化顯式專業化的成員,則可以使用template <> 例如:

template <class T>
struct A {
    template <class T2> struct B { }; // #1
};

template <>         // for A
template <class T2> // for B
struct A<int>::B<T2> { }; // #2

A<char>::B<int> x; // #1
A<int>::B<char> y; // #2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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