在Curiously Recurring Template模式中访问更多派生类函数/值

时间:2013-09-06 02:40:00

标签: c++ crtp

class SuperBase
{
   virtual void func() = 0;
};

template <typename Child>
class Base: public SuperBase
{
   void func()
   {
     cout<< static_cast<Child*>(this)->m_i;
   }
};

class Derived1: Base<Derived1>
{
   static const int m_i;
}

const int Derived1:m_i = 1;


    int main()
    {
       SuperBase *iob;
       iob = new Derived1();
       iob->func();
       return 0;
    }

现在,如果我想引入更多派生类,如Derived 2,我想将不同的值传递给Base,如 -

类Derived2:Base {    // static const int m_i2; }

然后我将无法做同样的事情。任何可以解决问题的设计调整?

1 个答案:

答案 0 :(得分:1)

func可以调用derived_func来处理变量,但derived_func必须在所有子类中都是相同的名称,并且必须单独编程(它们可以有默认值)在基类中)