首页 > 解决方案 > 如何使用基类指针访问派生模板类成员

问题描述

我尝试实现模板多态性以有条件地初始化模板类对象。现在我必须访问模板类的成员变量,但我不确定如何在这里做到这一点。

class base 
{
   public:
     base();
     virtual ~base();
};

template <typename T>
class derived : public base
{
  T derived_member;
}

...

void init(base*& base)
{
   if (flow1)
     base = new derived<int>();
   else if (flow2)
     base = new derived<string>();
   else if (flow3)
     base = new derived<float>();
   else 
     base = new derived<userdefined_type>();
}

void func1()
{
  base* b = NULL;
  init(b);

//   I want to access derived_mem of derived class .
// But I'm not understanding a better way to do something like this without typecasting base to 
// derived , is there a better way to do this ? The below code defeats the whole point of template
// polymorphism I believe
  if (flow1)
    doSomething((derived_mem<int>*)(b));
  else if (flow2)
    doSomething((<derived_mem<string>*>)(b));
   .....
}

我在想如果我能以某种方式理解如何在这里重载访问运算符,也许我可以做到这一点,但我不太确定。因为我正在处理遗留代码,所以我对编写get()访问函数并不完全感兴趣。derived_member

有一个更好的方法吗?

标签: c++templatespolymorphism

解决方案


推荐阅读