C++ 如何让列表隐式转换为我的类对象?

C++ 如何让列表隐式转换为我的类对象?,c++,c++11,list-initialization,C++,C++11,List Initialization,例如,我有一个类点和一个函数 void foo(Point pt); 称之为 foo({1, 2, 3}); 你必须有一个接受三个整数的构造函数。考虑: struct Point { Point (int p1_, int p2_, int p3_) : p1 {p1_}, p2 {p2_}, p3 {p3_} {} int p1; int p2; int p3; }; void foo (Point pt) { std::cout <<

例如,我有一个类
和一个函数

void foo(Point pt);
称之为

foo({1, 2, 3});

你必须有一个接受三个整数的构造函数。考虑:

struct Point {
    Point (int p1_, int p2_, int p3_) : p1 {p1_}, p2 {p2_}, p3 {p3_} {}

    int p1;
    int p2;
    int p3;
};

void foo (Point pt) {
    std::cout << pt.p1 << std::endl;
    std::cout << pt.p2 << std::endl;
    std::cout << pt.p3 << std::endl;
}
结构点{
点(int p1_u,int p2_u,int p3_u):p1{p1_},p2{p2_},p3{p3_}
int-p1;
int p2;
int-p3;
};
无效foo(点pt){
std::cout
#包括
#包括
结构条
{
void foo(const std::初始值设定项\u列表和位)
{
断言(bits.size()==3);
自动i=位。开始();
x=*i++;
y=*i++;
z=*i++;
}
int x,y,z;
};
int main()
{
b栏;
b、 foo({0,1,2});
}

添加一个构造函数,该构造函数采用
std::initializer\u list
initializer\u list
的设计目的是通过值便宜地传递。
foo ({1, 2, 3});
std::cout << std::endl;
foo ({4, 5, 6});
#include <initializer_list>
#include <cassert>

struct bar
{
    void foo(const std::initializer_list<int>& bits)
    {
        assert(bits.size() == 3);
        auto i = bits.begin();
        x = *i++;
        y = *i++;
        z = *i++;
    }

    int x, y, z;
};

int main()
{
    bar b;
    b.foo({0, 1, 2});
}