c++ - 如何将抽象类的派生类作为参数传递?
问题描述
我目前正在研究用于编码和解码文本的 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);
}
知道怎么做吗?也许是一种不创建对象而只使用静态方法的方法?还是我必须使用带有指针的对象?
解决方案
我自己找到了办法。其实很简单。
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);
}
推荐阅读
- node.js - 在节点机器定义中使用带有特殊字符的字符串
- angular - 带有 *ngFor 和异步管道的角递归组件进入循环
- c++ - 我如何配置 VS Code 才不会收到“未定义的引用”错误消息?
- xamarin.forms - 如何在 xamarin 表单中处理对工具栏项的多次点击?
- android - 如何将前 4 个项目从 recyclerView 设置为可见性消失?
- java - 我试图实现插入排序方法,但我没有得到写入数组排序
- php - Laravel 中的 orderBy() 方法是否提供针对 sql 注入的保护?
- asp.net-core-mvc - 内存缓存中的 Dotnet Core - 默认到期时间是什么
- ios - 重新加载表格视图的选定单元格
- ag-grid - AgGrid 树网格在同一组级别上不显示相同的叶子名称项