2016-05-05 4 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

彼はすでに二paramはおそらくOUTSTREAMする必要があります、しかし 'my_object'を持っています。しかし、良い解決策。 –

+0

@GillBates私が書いたように、それは一例にすぎません。ありがとうございました。 – Constructor

0

たぶん面倒に感じているだけあなたのエレメットを保存するために使用する新しいクラスを作成しますか?このように:

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

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

次に、メインクラスのメインウィンドウで、そのクラスのオブジェクトを使用しているものを作成します。実際にあなたはあまり情報を提供しておらず、あなたの質問に答えることは難しいです。

関連する問題