我有两个班级
class MyStoreClass
{
public:
std::vector<std::unique_ptr<MyClass>> my_vec;
};
和
class MyClass
{
public:
double member1;
int member2;
};
我有一个大约10000个MyClasses的向量 我希望能够使用诸如
之类的功能template<typename T>
void MyStoreClass::output_member(T MyClass::* chosen_member)
{
std::cout << chosen_member << std::endl;
}
我不确定从哪里开始。
编辑:我想从向量中的每个MyClass输出member
答案 0 :(得分:1)
你忘了描述函数应该做什么,所以我假设你希望函数打印my_vec
所有元素的相应成员。
您需要明确取消引用unique_ptr
才能使用指向成员的解除引用运算符。
其余的很简单:
template<typename T>
void MyStoreClass::output_member(T MyClass::* chosen_member)
{
for (const auto& ptr: my_vec)
{
if (ptr)
std::cout << (*ptr).*chosen_member << std::endl;
else
std::cout << "[null]" << std::endl;
}
}
继续假设,我将假设“标准”是指“我习惯的前C ++ 11循环”,因为基于范围的循环已经成为标准的几年了。
template<typename T>
void MyStoreClass::output_member(T MyClass::* chosen_member)
{
for (std::vector<std::unique_ptr<MyClass>>::const_iterator i = my_vec.begin();
i != my_vec.end();
++i)
{
if (*i)
std::cout << (*i)->*chosen_member << std::endl;
else
std::cout << "[null]" << std::endl;
}
}