输出类向量的成员

时间:2016-08-23 13:42:35

标签: c++ c++11

我有两个班级

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

1 个答案:

答案 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;
    }
}