【问题标题】:template default argument in a template模板中的模板默认参数
【发布时间】:2009-03-09 09:58:00
【问题描述】:

我正在尝试编译这个:

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

虽然它对我来说似乎很直观,但它不适用于我的编译器,有谁知道如何做到这一点?

编辑:好的,问题实际上不是来自这个问题,而是来自残余尝试......对不起,无论如何感谢您的回答。

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

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

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

    【讨论】:

    • 我也是用g++的,我想我太简单了,让我看看为什么
    【解决方案2】:

    Comeau编译很好...

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        要么你的编译器不是标准的抱怨,要么你犯了以下错误之一:

        1. myDefaultUClass 不是模板
        2. myDefaultUClass 未定义

        因为以下在 G++ 中可以正常工作:

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

        【讨论】:

          猜你喜欢
          • 2015-08-15
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          • 2016-05-23
          • 2017-04-15
          • 2018-07-16
          • 1970-01-01
          • 2013-02-28
          相关资源
          最近更新 更多