根据该输入字符串将字符串映射到不同的类
Map string to different classes based on that input string
我正在尝试使用以下模板创建C++地图
map<string,class> mapper;
其中映射器将包含以下数据
mapper['a'] = Class A or object of Class A
mapper['b'] = Class B or object of Class B
mapper['c'] = Class C or object of Class C
对于这种根据输入字符串选择类的映射,映射器的模板应该是什么?
假设字符串仅在运行时已知,并且您可以构建类的层次结构,最简单的选择是使用多态性和std::function
来构建工厂函数的映射:
鉴于。。。
struct Base
{
virtual ~Base() { }
};
struct Derived0 : Base { };
struct Derived1 : Base { };
// ...
。你可以有...
std::map<std::string, std::function<std::unique_ptr<Base>>> map;
map["derived0"] = []{ return std::make_unique<Derived0>(); };
map["derived1"] = []{ return std::make_unique<Derived1>(); };
// ...
。可以按如下方式使用:
std::string desiredType;
std::cin >> desiredType;
auto result = map[desiredType]();
请注意,这种设计通常是一种代码异味。仔细考虑你想要实现的目标 - 可能有一种更干净/更优雅的方式来做到这一点。
此外,使用 std::unique_ptr
和 std::function
可能会在应用程序中引入明显的开销。
相关文章:
- 如何使用堆栈将字符串输入拉伸 k 次
- 不确定出了什么问题(字符串输入)
- 如何获取字符串输入n次?
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- isPalindrome不显示输出,isPalindrome函数未使用字符串输入作为字符串参数进行测试
- C++ 对象数组字符串输入在控制台上不起作用
- 为什么 cin 在包含字符串标头后接受字符串输入
- 拆分字符串输入并查找字符是否有效
- 有没有办法将最初作为字符串输入的数字字符数组复制到双向链表中
- 将字符串输入到多维数组中
- 字符串输入后的空格
- 字符串流中的自定义字符串输入
- C 未验证字符串输入
- 总结数字字符串输入的最佳方法
- 如何验证用户将字符串输入到std :: cin中
- 在C++测试家庭作业问题中的字符串输入时无法退出循环(作为数据验证)
- 如何在C++中检测字符串输入中的换行符
- C++将字符串输入拆分为两个整数
- 如何检查字符串输入是否为有效的双精度
- 在读取数据文件时,如何找到用户字符串输入的字谜?