gpt4 book ai didi

c++ - 修改成员初始化器列表

转载 作者:行者123 更新时间:2023-11-30 03:34:23 25 4
gpt4 key购买 nike

我有一些代码可以有效地减少到

#include <vector>
class A {
std::vector<int> m_sizes;
public:
A(std::initializer_list<int> const& sizes) : m_sizes(sizes) {}
};

class B {
A m_a;
public:
B(int size_front, int size_back, std::initializer_list<int> const& sizes) : m_a({ size_front, sizes, size_back }) {}
};

编译器提示没有 A::A 的实例匹配参数列表。有什么方法可以使 { int, std::initializer_list<int>, int } 变平吗?到 std::initializer_list<int>还是我必须给 A一个额外的构造函数来处理这种情况?如果我无法修改 A 怎么办?类(class)?

最佳答案

您尝试执行的操作是不可能的:initializer_list<T>必须从 T 类型的项目列表中构建,其计数在编译时已知。在中间插入现有列表不起作用。

您可以通过添加采用 vector<int> 的构造函数重载来解决此问题。直接,并将调用转发给它:

class A {
std::vector<int> m_sizes;
public:
A(const std::vector<int>& sizes) : m_sizes(sizes) {}
A(std::initializer_list<int> const& sizes) : A(std::vector(sizes)) {}
};
class B {
A m_a;
std::vector<int> frame(int size_front, int size_back, std::initializer_list<int> const& sizes) {
std::vector res;
res.push_back(size_front);
std::copy(sizes.begin(), sizes.end(), std::back_inserter(res));
res.push_back(size_back);
return res;
}
public:
B(int size_front, int size_back, std::initializer_list<int> const& sizes) : m_a(frame(size_front, size_back, sizes)) {}
};

关于c++ - 修改成员初始化器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42089104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com