2016-05-05 3 views
1

У меня есть вектор unique_ptr<my_class> и хотел бы иметь возможность передать функции переменную-член этого класса, которую я хотел бы выводить. Этот вектор является частью самого класса.Вывод типа элемента вектора типов

Например, я хотел бы

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 
} 

А потом просто сделать

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

На данный момент у меня отдельную функцию для каждой переменной-члена, и это чувствует себя громоздким

ответ

2

Использование pointer to data members (это только пример, вы должны принять его к вашей ситуации):

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

Здесь .* это один из pointer to member access operators.

Пример использования:

struct MyClass 
{ 
    int member_variable_; 
}; 

// ... 

MyClass my_object{42}; 

output_member(my_object, &MyClass::member_variable_); 

Live demo

+0

Он уже имеет 'my_object', хотя, вторые пары, вероятно, следует быть outstream. Хорошее решение. –

+0

@GillBates Как я уже писал, это был только пример. Спасибо. – Constructor

0

Может просто создать новый класс, который вы будете использовать для хранения ваших элементов? Например:

class Memory 
{ 
    private: 
std::vector<yourclass> vec; 

public: 
std::vector<yourclass> getVector() 
{ 
return vec; 
} 
}; 

Затем создайте объект этого класса в главном окне основного класса, независимо от того, что вы используете. На самом деле вы не предоставили слишком много информации, и на ваш вопрос сложно ответить.

Смежные вопросы