c++ - 使用其他成员初始化结构体的成员?

标签 c++ struct constructor initialization parameter-passing

我想知道是否可以创建一个结构,并使用结构中初始化的成员/变量作为参数来构建其他成员。例如,我想制作一个结构:

struct myStruct {
    size_t length;
    std::string (&strings)[length]; // from the above variable
};

类似这样的事情。我知道初始化顺序有一些微妙之处,但我确信可以解决一些问题(也许是构造函数?)来克服这个问题。目前,我发现唯一有效的方法是模板:

template <size_t N>
struct myStruct {
    int length;
    std::string (&strings)[N]; // from the template parameter
};

请记住,我实际上将 length 值作为结构中的成员变量传递,因此理想情况下我不需要模板。

编辑:
澄清:我只需要访问数组字符串并能够从它们中读取(不需要覆盖它们,因此可以而且应该使用 const),就像使用常规数组一样:[基于] 的表示法。我也可以容忍对 std::array 的更改。无论如何,我只需要以与常规用法没有明显不同的方式轻松访问字符串。此外,它必须来自结构指针(也称为箭头运算符)。

非常感谢!

最佳答案

您不得使用

struct myStruct {
    size_t length;
    std::string (&strings)[length];
};

length不是编译时间常数。

您最好的选择可能是使用 std::vector<std::string>& .

struct myStruct {
    // Assuming you were using a reference on purpose.
    std::vector<std::string>& strings;
};

并在构造函数中对其进行初始化。

struct myStruct {
    myStruct(std::vector<std::string>& in) : strings(in) {}
    std::vector<std::string>& strings;
};

如果在编译时已知数组的大小,则有几种选择。

  1. 使用 std::string 的常规数组s。

    template <size_t N>
    struct myStruct {
        int length;
        std::string (&strings)[N];
    };
    
  2. 使用std::arraystd::string s。

    template <size_t N>
    struct myStruct {
        int length;
        std::array<std::string, N>& strings;
    };
    

第二个选项更好,因为 std::array s 拥有常规数组所具有的一切以及更多。

关于c++ - 使用其他成员初始化结构体的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866316/

相关文章:

C编程: Dereferencing pointer to incomplete type error

java - 从类扩展构造函数

c++ - QGraphicsScene::addItem: 项目已经被添加到这个场景

c++ - C++中整数类型可以存储的最大值

c++ - C++20 keys_view 和 values_view 的真正目的是什么?

C - 结构体字符串元素被连接

c++ - Mat::push_back(x) 是否复制 x 个元素?

C++结构数组定义

C++映射错误,有结构和方法,无法将字符串转换为_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<等

Java——私有(private)构造函数 vs final 等等