模板中的模板默认参数

时间:2009-03-09 09:58:00

标签: c++ templates

我正在尝试编译:

template <class T, class U = myDefaultUClass<T> >
class myClass{
 ...
};

虽然对我来说这似乎很直观但不适合我的编译器,有谁知道怎么做?

编辑:好的,问题实际上并非来自此问题,而是来自剩下的尝试...对此感到抱歉,无论如何,谢谢您的回答。

4 个答案:

答案 0 :(得分:6)

以下适用于我使用g ++。请发布更多代码,您收到的错误消息和编译器版本。

class A {};

template <class T> class T1 {};

template <class T, class U = T1<T> > class T2 {
};

T2 <A> t2;

答案 1 :(得分:3)

使用Comeau编译正确...

答案 2 :(得分:0)

这适用于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;
}

答案 3 :(得分:0)

要么您的编译器不是标准投诉,要么是您犯了其中一个错误:

  1. myDefaultUClass不是模板
  2. 未定义myDefaultUClass
  3. 因为以下在G ++中工作正常:

    class myDefaultUClass{};
    
    template <class T, class U = myDefaultUClass >
    class myClass{
     //...
    };