下面的代碼片段將不會在MSVC++編譯2010(編譯罰款與海灣合作委員會,國際會議中心和太陽CC):模板偏特用默認
#include <iostream>
template< class T, unsigned D > struct Attribute
{
T attr[D];
};
template< class T, unsigned D, class A = Attribute< T, D > > struct Point
{
T coor[D];
A a;
};
template< class P1, class P2 > struct Pair;
template< class T1, class T2, unsigned D > struct Pair< Point< T1, D>, Point< T2, D > >
{
Point< T1, D> p1;
Point< T2, D> p2;
static const char * id()
{
return "specialized";
}
};
int main()
{
Pair< Point< float, 3>, Point< double, 3> > p;
std::cout << p.id() << std::endl;
return 0;
}
如果我刪除默認class A
從Point
聲明它編譯得很好。有關如何解決此問題而不更改Pair的非專用聲明(即,template< class P1, class P2 > struct Pair;
)的任何建議,我們將不勝感激。刪除實際代碼中的默認值也不是一個選項。
error C2079: 'p' uses undefined struct 'Pair<P1,P2>'
with
[
P1=Point<float,3>,
P2=Point<double,3>
]
什麼錯誤(S),你接受? –
我會將錯誤添加到OP –
您是否將第三個(默認)參數傳遞給'struct Point'?我的意思是'A類'總是一個默認參數'Attribute'? –
iammilind