首页 > 解决方案 > 如何将抽象类的派生类作为参数传递?

问题描述

我目前正在研究用于编码和解码文本的 C++ 标头。确切地说:UTF-8、UTF-16、UCS-2 和 UTF-32。但我已经到了我的 C++ 知识不会让我更进一步的地步:

我想使用抽象类进行解码和编码,同时为每个编解码器创建基类。然后,如果使用与编码或解码相关的任何函数,开发人员应该能够将自定义数据类型传递给函数。

问题是我不知道如何实际做到这一点。毕竟,您不能将静态类作为参数传递。但我也不想硬编码任何东西。开发人员还应该能够轻松添加任何编解码器,并且无需修改我的标头。

此外,它应该尽可能简单。代码看起来像这样:

namespace Encoding {

  class Encoder {
  public:
    virtual std::string Encode(std::string sOriginal) = 0;
  };

  // Derived classes like UTF8 and UCS2 here

}

void OutputEncoded(std::string s, Encoder enc) {
  std::cout << enc.Encode(s);
}


int main() {
  OutputEncoded("Hellö Wörld!", Encoding::UTF8);
}

知道怎么做吗?也许是一种不创建对象而只使用静态方法的方法?还是我必须使用带有指针的对象?

标签: c++parameterspolymorphismabstract

解决方案


我自己找到了办法。其实很简单。

class Base {
public:
  virtual void DoSomething(void) = 0;
};

class Derived : public Base {
  void DoSomething(void) {
    std::cout << "Test";
  }
} DerivedTest;

Base* const DerivedTestPtr = &DerivedTest;



void Test(Base* b) {
  b->DoSomething();
}



int main() {
  Test(DerivedTestPtr);
}

推荐阅读