Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++数据结构,其中初始化可以使用其名称_C++_Struct - Fatal编程技术网

C++数据结构,其中初始化可以使用其名称

C++数据结构,其中初始化可以使用其名称,c++,struct,C++,Struct,我需要创建一个有很多成员的数据结构。例如: struct MyStruct { int varSomething; int helloNumber; int thisIsSomething; ... int varNumber50;//50th element } 此结构的问题在于,当我想要实例化它时,我需要执行以下操作: my_vector[i] = MyStruct{10, 4, 90, ...} 正如你所看到的,我需要输入很多值,最终我弄不清哪一

我需要创建一个有很多成员的数据结构。例如:

struct MyStruct {
    int varSomething;
    int helloNumber;
    int thisIsSomething;
    ...
    int varNumber50;//50th element
}
此结构的问题在于,当我想要实例化它时,我需要执行以下操作:

my_vector[i] = MyStruct{10, 4, 90, ...}
正如你所看到的,我需要输入很多值,最终我弄不清哪一个是哪一个。理想情况下,我想做这样的事情:

my_vector[i] = MyStruct{varSomething = 10, helloNumber = 4, thisIsSomething = 90, ...}
因为每个变量都有一个名称,所以我知道自己在做什么,不能混淆

我知道我可以做到这一点:

MyStruct myStruct;
MyStruct.varSomething = 10;
myStruct.helloNumber = 4;
...
my_vector[i] = myStruct
但是我想创建一个匿名结构,创建一个命名结构只是为了放入向量是不好的


解决这个问题的好办法是什么?是否有类似于结构的东西可以实现我想要的东西???

使用c++20指定的初始值设定项,您可以执行以下操作

struct MyStruct {
    int  a,b,c;
};

int main(){
    MyStruct my_value { 
        a : 2, 
        b : 3, 
        c : 95 
    };
}
在这种情况下,我建议不要使用它,因为它是一种明确的代码气味。 你需要重新思考你的设计,也许可以看看设计模式,比如工厂、建筑商或原型,让你更好地了解如何创建你的对象

有关详细信息,请参阅以下链接:


相关/重复:如果名称很重要,则可以使用std::map作为成员变量,但如果要从映射中访问特定成员,则必须付出较小的性能代价。性能损失是否可以接受完全取决于您的应用程序。如果您有许多命名成员变量,那么您的设计几乎肯定是错误的。最好不要滥用这样的结构。结构不是数据库。使用更合适的方法。目前是否有任何编译器或编译器的开发分支支持此方法?另外,为什么使用name:value语法而不是.name=value语法呢?是的,gcc和msvc目前支持它,在编译它的示例:Huh中提供了部分支持。我没有意识到这两种语法都是支持的。C++中的其他语法不支持,因为C++需要初始化。我相信这就是不同语法的原因,强调它们的操作不同。有关更多信息,请参阅本文: