gpt4 book ai didi

c++ - 构造函数中的初始化列表问题

转载 作者:行者123 更新时间:2023-12-05 09:00:37 26 4
gpt4 key购买 nike

我很难理解 std::initializer_list 是如何工作的。我 checked other questions ,但没有找到任何相关内容(或者我没看到?)。

假设我有这个:

template<typename T> 
struct Point
{
T x,y;
};

template<typename T>
struct A
{
std::vector<Point<T>> v;
};

然后我可以构建:

int main()
{
A<int> a{ std::vector<Point<int>> { {4,4}, {5,5},{6,6} } };
}

但我想让事情更简单,所以我可以写:

int main()
{
A<int> a( { {4,4}, {5,5},{6,6} } );
}

我试过:

template<typename T> 
struct A
{
std::vector<Point<T>> v;
template<typename U>
A( const std::initializer_list<Point<U>>& il ) : v{il}
{}
};

但这失败了,see live demo .

我怎样才能编写允许这样做的构造函数?这可能吗?

最佳答案

你的构造函数不应该是模板,你的类已经是。 {..} 没有类型,可以推导为很少的类型。

删除后,以下工作:

template<typename T> 
struct A
{
std::vector<Point<T>> v;

A( const std::vector<Point<T>>& in ) : v(in) {}

A( const std::initializer_list<Point<T>>& il ): v{il}
{}
};

int main()
{
std::vector<Point<int>> v{ {4,4}, {5,5},{6,6} };
A<int> a1( std::vector<Point<int>> { {4,4}, {5,5},{6,6} } ); // this is fine
assert( a1.v.size() == 3 );

A<int> a2{{4,4}, {5,5}, {6,6} };
assert( a2.v.size() == 3 );

A<int> a3({{4,4}, {5,5}, {6,6} });
}

Demo

关于c++ - 构造函数中的初始化列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75375701/

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