2012-11-09 9 views
8

Czy istnieje C++ 11 równoważne z niniejszym oświadczeniem Pythona:C++ 11 odpowiednik Pythona X, Y, Z = array

x, y, z = three_value_array 

W C++ można zrobić to jako:

double x, y, z; 
std::array<double, 3> three_value_array; 
// assign values to three_value_array 
x = three_value_array[0]; 
y = three_value_array[1]; 
z = three_value_array[2]; 

Czy jest to bardziej kompaktowy sposób osiągnięcia tego w C++ 11?

+2

Nie standardowej C++ (Boost.Fusion może mieć coś, aby pomóc tutaj), ale jeśli miał 'std :: krotka 'zamiast' std :: array 'możesz zamiast tego użyć' std :: tie (x, y, z) = three_value_tuple; '. – ildjarn

Odpowiedz

9

Można użyć std::tuple i std::tie do tego celu:

#include <iostream> 
#include <tuple> 

int main() 
{ 
    /* This is the three-value-array: */ 
    std::tuple<int,double,int> triple { 4, 2.3, 8 }; 

    int i1,i2; 
    double d; 

    /* This is what corresponds to x,y,z = three_value_array: */ 
    std::tie(i1,d,i2) = triple; 

    /* Confirm that it worked: */  
    std::cout << i1 << ", " << d << ", " << i2 << std::endl; 

    return 0; 
} 
+1

Czy oryginalna konstrukcja z tablicą działała? – Jason

+0

'std :: tie' jest zdefiniowany, aby zwrócić' std :: tuple' tylko, niestety. – jogojapan

+0

Możesz zrobić 'std :: tie (j1, j2, j3) = std :: make_tuple (ar [0], ar [1], ar [2]);' (gdzie 'ar' jest tablicą), ale to prawdopodobnie nie jest tak eleganckie jak kod Pythona. – jogojapan

Powiązane problemy