【发布时间】:2016-01-18 08:30:39
【问题描述】:
C++/CLI 有一个 System::Object 类来实现这个目的,但我似乎在标准库中找不到。基本上我正在编写一组类,我希望基类将std::string 的向量存储在content 属性中,但派生类可能需要存储其他东西的向量(甚至可能是我的一个自己的班级)。这似乎是一个奇怪的目标,但我正在编写一些文件访问类来让我更轻松地操作不同格式的文件。基类 File 将每一行存储在一个字符串中,作为向量的一部分 - 但例如 JSON 的一个类可能需要存储 JS 样式的集合/对象等。
我能想到的唯一方法是让 content 属性成为对象向量(或其他一些通用基类 - 为了多态性,我也可以从中派生任何自定义类),然后将其转换回根据正在使用的子对象的类型,进入任何必要的类型。我很快发现我在任何地方都找不到任何提及std::object(或类似名称)的内容。
这个例子应该展示我想要做什么:
class File {
protected:
std::vector<std::object> _content;
public:
//Contructors/methods/etc.
std::string getItemAt(size_t index) {
return static_cast<std::string>(this->_content[index]);
}
void setItemAt(size_t index, std::string value) {
this->_content[index] = static_cast<std::object>(value);
}
};
class JSONFile: File {
public:
//Constructors/methods/etc.
SomeObject getItemAt(size_t index) {
return static_cast<SomeObject>(this->_content[index]);
}
void setItemAt(size_t index, SomeObject value) {
this->_content[index] = static_cast<std::object>(value);
}
};
请注意,此示例假定 std::object 存在,并且 SomeObject 将是用于处理 JSON(再次,例如 - 这可能是任何东西)数据的任何内容。 SomeObject 显然会派生自 std::object。
任何建议都将不胜感激,或如果我在这方面完全走错了路,任何关于我如何做到这一点的反馈,这样std::object 的事情就没有必要了将不胜感激:)
【问题讨论】:
-
我不明白你为什么要寻找像
std::object这样的东西。如果你自己的类需要一个基类,就写一个 -
查看
boost::any -
@tobi303 实际上我需要在 std::string as well 之间转换为我自己的类 - 因此我的困境
-
@BradSullivan 对不起,我仍然没有看到问题。只需编写包含
std::string或std::whatever或XYZ::My_own_class的类(从您的基类继承)
标签: c++ oop c++11 polymorphism base-class