Voglio la mia classe può essere list-inizializzato come vettore:come posso elencare-inizializzare la mia classe?
myClass a = {1, 2, 3};
Come posso fare quello using C++ 11 capacità?
Voglio la mia classe può essere list-inizializzato come vettore:come posso elencare-inizializzare la mia classe?
myClass a = {1, 2, 3};
Come posso fare quello using C++ 11 capacità?
C++ 11 ha una nozione di elenchi di inizializzatori. Per usarlo, aggiungi un costruttore che accetta un singolo argomento di tipo std::initializer_list<T>
. Esempio:
#include <vector>
#include <initializer_list>
#include <iostream>
struct S
{
std::vector<int> v_;
S(std::initializer_list<int> l)
: v_(l)
{
std::cout << "constructed with initializer list of length " << l.size();
}
};
int main()
{
S s = { 1, 2, 3 };
return 0;
}
Un initializer_list
possono essere (come altri contenitori STL) iterati e size
possono essere interrogati. Questo ti permette di fare come indicato nell'altra risposta da yuyoyuppe di inviarlo immediatamente a vector
. Ma potresti avere altri intenti per la tua inizializzazione e fare qualcosa come eseguire un'operazione direttamente sugli elementi della lista senza copiare.
#include <initializer_list>
#include <iostream>
#include <algorithm>
struct S
{
int thesum;
int items;
S(std::initializer_list<int> l) :
thesum(std::accumulate(l.begin(), l.end(), 0)),
items(l.size())
{}
};
int main()
{
S s = { 1, 2, 3 };
std::cout << s.items << std::endl;
std::cout << s.thesum << std::endl;
return 0;
}
Questo stampa
3
6
See: