【发布时间】:2019-07-30 14:39:30
【问题描述】:
在 C++ 中,我经常需要使用一个包含各种数据类型的极其简单的原始对象,以便我可以在函数之间轻松地传递它。在 Python 中,我通过使用字典来实现这一点。例如:
easy = {"keyframe_range":[], "value":0.25, "interpolation":"bezier"}
但是,在 C++ 中,如果我想创建类似的东西,我需要:
struct obj
{
vector<int> keyframe_range;
float value;
string interpolation;
obj(vector<int> vv, float ff, string ss) : keyframe_range(vv), value(ff), interpolation(ss) {}
};
obj easy(vector<int>(), 0.25, "bezier");
当我需要随心所欲地创建谁知道什么样的对象时,为我需要的每个对象手动编写参数化构造函数是非常低效和浪费时间的。在 Python 中,我基本上可以通过字典避免这种情况;但是,C++ 中的 unordered_maps 必须映射到相同的数据类型,所以它们并不是我真正想要的。
本质上,我只是想要一种简单的方法来创建一个简单的对象,该对象充当各种数据类型的项目的集合,仅此而已。这可以在 C++ 11 中实现吗?如果可以,如何实现?
【问题讨论】:
-
结构/类是要走的路。如果您不喜欢编写构造函数,请让您的 IDE 完成这项工作。
-
您可以使用模板来实现这一点,variadic templates。
-
@nada
tuple很酷,但它被设计用于通用编程的情况(例如存储可变参数,所以以后它们可以被std::apply使用)。我讨厌tuple没有模板代码。它使代码更难阅读和维护。
标签: c++ c++11 object constructor initialization