{"title":"C++ 类A 变量b 类型动态确定:在类B 中使用虚函数和基类指针","description":"本文探讨了在 C++ 中,如何动态确定类 A 中变量 b 的类型,并在类 B 中使用该类型信息。文章介绍了使用虚函数和基类指针的解决方案,并提供了示例代码。","keywords":"C++, 类, 变量类型, 动态确定, 虚函数, 基类指针, 类型信息, RTTI","content":"如果你不希望类B为模板类,那么你可以在类A里面定义一个虚函数,用于返回变量b的类型。然后在类B中,使用基类指针来保存实例A,并通过调用虚函数来获取类型信息。\n\n以下是一个示例代码:\n\ncpp\n#include <iostream>\n#include <vector>\n\nclass A {\npublic:\n virtual ~A() {}\n virtual const std::type_info& getBType() const = 0;\n};\n\ntemplate<typename T>\nclass ConcreteA : public A {\npublic:\n ConcreteA(T b) : b(b) {}\n const std::type_info& getBType() const override {\n return typeid(T);\n }\n \n T b;\n};\n\nclass B {\npublic:\n void pushA(A* instanceA) {\n c.push_back(instanceA);\n }\n\nprivate:\n std::vector<A*> c;\n};\n\nint main() {\n B b;\n ConcreteA<int> instanceA(10);\n b.pushA(&instanceA);\n \n return 0;\n}\n\n\n在这个示例中,类A是一个抽象基类,定义了一个纯虚函数getBType(),并且使用typeid来返回变量b的类型信息。然后,使用模板类ConcreteA继承自A,并实现了getBType()函数。类B中使用std::vector<A*>来保存A的实例,并通过pushA()函数将实例加入到c中。在main函数中,首先创建了一个ConcreteA<int>的实例,然后通过pushA()将其加入到实例B中。\n\n请注意,这种方法依赖于运行时类型信息(RTTI),并且在使用时需要谨慎。另外,为了确保类型安全,你可能需要在类B中添加其他的逻辑来保证添加的实例类型与变量b的类型匹配。"}


原文地址: https://www.cveoy.top/t/topic/qc5R 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录