2016-05-05 15 views
1

Ich habe einen Vektor unique_ptr<my_class> und möchte in der Lage sein, die Member-Variable dieser Klasse, die ich ausgeben möchte, an eine Funktion übergeben. Dieser Vektor ist Teil einer Klasse für sich.Ausgabe Member-Typ eines Vektors von Typen

Zum Beispiel würde Ich mag zu

void my_top_class::output_member(sometype var_to_output, std::ofstream &out) 
{ 
    // Iterate over the vector and output the member variable 
    out << my_class->var_to_output << std::endl; 
    // Or something similar 
} 

Und dann tun nur

my_top_class.output_member(var1, file_out); 
my_top_class.output_member(var2, file_out); 

Im Moment habe ich für jedes Mitglied Variable eine eigene Funktion haben und das fühlt sich umständlich

Antwort

2

Verwendung pointer to data members (es ist nur ein Beispiel, sollten Sie es auf Ihre Situation annehmen):

template <typename MemberType> 
void output_member(const MyClass& my_object, MemberType MyClass::* var_to_output) 
{ 
    std::cout << my_object.*var_to_output << std::endl; 
} 

Hier .* ist eine von pointer to member access operators.

Beispiel für die Verwendung:

struct MyClass 
{ 
    int member_variable_; 
}; 

// ... 

MyClass my_object{42}; 

output_member(my_object, &MyClass::member_variable_); 

Live demo

+0

Er hat bereits eine 'my_object' allerdings sollte zweiten param wahrscheinlich ein outStream sein. Gute Lösung. –

+0

@GillBates Wie ich schrieb, war es nur ein Beispiel. Vielen Dank. – Constructor

0

Vielleicht nur eine neue Klasse erstellen, in der du deine elemets speichern kannst? Wie folgt:

Dann erstellen Sie ein Objekt dieser Klasse im Hauptfenster Ihrer Hauptklasse, was auch immer Sie verwenden. Tatsächlich hast du nicht zu viele Informationen zur Verfügung gestellt und es ist schwer deine Frage zu beantworten.

Verwandte Themen