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