C ++重复模板模式,包括父级嵌套模板类

时间:2012-11-23 13:03:29

标签: c++ crtp incomplete-type

请帮助,我需要从2005年开始在以下(不是实际的,仅仅是说明性的)MSVC代码中解开反复出现的依赖关系。我正在使用这样的g ++进行编译:

g++ -std=c++x -I. -o -Wall -Wextra -pedantic example example.cpp

代码:

template <typename R> struct AAA
{
    typedef R rep_t;

    static function(rep_t n, rep_t d) {return d;}
};

template <typename T> struct HELPER_CLASS
{
    //arithmetic operators:

    friend T operator/ (T const& lhs) {T res; res /=lhs; return res;}

    //... so on, also for comparison operators
}

template <typename  T=long> class BBB : public HELPER_CLASS< BBB<T> >
{

        typedef typename HELPER_CLASS< BBB<T> >::template AAA<T> P;
        typedef typename AAA<T>::rep_t rep_t;

    public:
        BBB& operator/=(BBB const& that) 
        {this->rep_=P::function(this->rep_, that.rep_); return *this;}

    private:
        rep_t rep_;
}

编译这个,我收到以下错误:

  

错误:'struct HELPER_CLASS&gt;'

中没有名为'AAA'的类模板

当我在HELPER_CLASS中声明AAA时,它看起来像这样:

template <typename T> struct HELPER_CLASS
{
    //arithmetic operators:
    friend T operator/ (T const& lhs) 

    {T res; res /=lhs; return res;}
    //etc. for e.g. comparison operators

    template <typename R> struct AAA;
};

我留下了这个错误:

  

错误:类型不完整HELPER_CLASS&lt; BBB&gt; :: AAA'用于嵌套名称说明符。

有没有办法说服g ++像MSVC那样松散地对待这些东西?

如何确保在需要时定义类型? 谢谢!

0 个答案:

没有答案