使用各种数据类型成员创建对象的简便方法
Easy way to create object with members of various datatypes
在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中完成,如果是的话,如何?
这是极低的效率,并且浪费时间来手动写作 我需要的每个对象的参数化构造函数。
我完全同意。但是,没有问题,因为您实际上不需要为每个简单结构编写构造函数:
#include <vector>
#include <string>
#include <iostream>
struct obj
{
std::vector<int> keyframe_range;
float value;
std::string interpolation;
};
int main() {
obj easy{ {}, 0.25, "bezier"};
std::cout << easy.value << " " << easy.interpolation;
}
它称为汇总初始化,可以在类具有
时完成
没有私人或受保护的直接(自C 17(非静态数据成员
没有用户指定的构造函数(直到C 11(
没有用户提供的构造函数(允许明确默认或删除的构造函数((因为C 11((直到C 17(
不提供用户提供,继承或显式构造函数(允许明确默认或删除的构造函数((由于C 17((直到 C 20(
没有用户指定或继承的构造函数 [...]
和几个限制,通常都适用于这样的简单结构(它们称为聚合(。
本质上,我只是想要一种简单的方法来创建一个简单的对象 它充当各种数据类型的项目的集合,什么也没有 更多的。可以在C 11中完成,如果是的话,如何?
另外,您应该看一下std::tuple
,尽管编写自己的班级的好处是给成员有意义的名字,并且可以区分AS std::tuple
完全相同的类型。
另一方面,std::tuple
的优点是它带有几个已经定义的操作员(例如operator<
(。因此,根据您的用例,您可以选择一个或另一个。
您可以使用std::tuple
。它使您可以创建一个异质类型的对象,而无需指定所有锅炉板。虽然确实有一个偏低的一面。您不能给元组成员一个名字。您必须通过"索引"访问它们(第一个成员是索引0(或类型(这仅在不复制类型的情况下起作用(。所以
easy = {"keyframe_range":[], "value":0.25, "interpolation":"bezier"}
将成为
auto easy = std::tuple<std::vector<int>, float, std::string>{{}, 0.25, "bezier"}
ans您将访问诸如std::get<1>(easy)
/std::get<float>(easy)
之类的成员以获取float
成员。
c 17:您可以使用结构化绑定来命名访问
之类的成员auto&[easy_vec, easy_float, easy_string] = easy;
和现在的easy_vec
,easy_float
和easy_string
是元组成员。
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- C ++:如何在不创建对象的情况下在主函数中调用方法
- 工厂方法创建的对象应该在哪里删除?
- 如何在一种方法中创建对象并在另一种方法中使用它
- 如何发送通过绑定到函数/方法创建的函数对象?
- 使用各种数据类型成员创建对象的简便方法
- 是否可以在一个语句中创建对象并调用方法?
- 在堆栈上创建对象的不同方法
- 如何使用工厂方法创建不同的对象
- 仅通过基类"create"方法将对象创建为共享指针
- C++模板方法来创建对象
- 存储动态创建对象的列表/向量的最佳方法是什么
- 无法创建对象并使用其模板类方法
- 有没有一种方法可以强制使用shared_ptr在堆上创建对象
- 创建对象数组然后有效删除它们的更好方法
- 用方法和对象创建函数对象
- 使用私有构造函数在静态方法中创建对象
- 静态方法来创建对象而不是构造函数