【发布时间】:2009-03-09 09:58:00
【问题描述】:
我正在尝试编译这个:
template <class T, class U = myDefaultUClass<T> >
class myClass{
...
};
虽然它对我来说似乎很直观,但它不适用于我的编译器,有谁知道如何做到这一点?
编辑:好的,问题实际上不是来自这个问题,而是来自残余尝试......对不起,无论如何感谢您的回答。
【问题讨论】:
我正在尝试编译这个:
template <class T, class U = myDefaultUClass<T> >
class myClass{
...
};
虽然它对我来说似乎很直观,但它不适用于我的编译器,有谁知道如何做到这一点?
编辑:好的,问题实际上不是来自这个问题,而是来自残余尝试......对不起,无论如何感谢您的回答。
【问题讨论】:
以下对我使用 g++ 有效。请发布更多代码、您收到的错误消息和编译器版本。
class A {};
template <class T> class T1 {};
template <class T, class U = T1<T> > class T2 {
};
T2 <A> t2;
【讨论】:
用Comeau编译很好...
【讨论】:
这适用于 MSVC 9.0:
template < class T >
class UClass
{
private:
T m_data;
};
template < class T, class U = UClass< T > >
class MyClass
{
public:
const U& data() const { return m_data; }
private:
U m_data;
};
int main()
{
MyClass< int > test;
const UClass<int>& u = test.data();
return 0;
}
【讨论】:
要么你的编译器不是标准的抱怨,要么你犯了以下错误之一:
因为以下在 G++ 中可以正常工作:
class myDefaultUClass{};
template <class T, class U = myDefaultUClass >
class myClass{
//...
};
【讨论】: