c++使用dynamic_cast来转换类型仅为string
c++ use dynamic_cast when casting type is only known as string
我有几个类派生自另一个类。
class t1 : fu
class t2 : fu
....
我必须首先动态地创建fu
的对象,然后将其强制转换为派生类。
这将是一个静态的工作方式:
t1 vart1_1 = dynamic_cast<t1 *>(fu1);
t1 vart1_2 = dynamic_cast<t1 *>(fu2);
t2 vart2_1 = dynamic_cast<t2 *>(fu3);
问题是,在运行之前我不知道我有哪些和多少个fu-object。
得到的是一个list
list[]={{string type, string fuName},{string type, string fuName}, ...}
我想遍历列表,用fuName创建fu对象,如果可能的话,可以这样做:
type fuName = dynamic_cast<type *>(fu);
另一个问题是我不能改变fu和它的派生类…
我希望你明白我想要什么
您在c++中没有反射,因此您无法轻松实现您想要做的事情。我所见过的每一次破解语言内部反射的尝试都被证明是有效的……只是一个非常糟糕的黑客。
另一个解决方案是尝试将其强制转换为所有派生类,如果强制转换不成功,dynamic_cast将返回一个nullptr。
这表示一个设计问题,但是你不应该需要这样做。
如果你有一个类名列表和可供选择的方法来进行强制转换,那么你需要检查指针的typeid,然后将字符串与列表进行比较,以获得要调用的方法,有关typeid的更多信息请阅读http://en.cppreference.com/w/cpp/language/typeid
相关文章:
- 使用char类型将decimal转换为string,将string转换为decimal
- 与'operator='不匹配(操作数类型'String'且"void")
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 可以从std::string继承以提供类型一致性吗
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 错误:无法传递非平凡类型"std::string"的对象和更多错误
- C++:将模板类型 char 转换为 std::string
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 错误:"cast"未命名类型void setCastDescription(std::string
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 包括<字符串>,使用不完整的类型"std::string"
- 附加类型安全的子类std::string
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- Arduino trim() 和 replace() 方法返回从 'void' 到非标量类型'String'请求的转换
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- 非 POD 元素类型 'string'(又名 '<char>basic_string')c++ 的可变长度数组
- 从文件中读取数据类型string, int double.将每一行数据放入对象向量中
- OS X 错误非 pod 元素类型 'string' 的可变长度数组