输出类的向量的一个成员

Outputting a member of a vector of classes

本文关键字:一个 成员 向量 输出      更新时间:2023-10-16

我有两个类

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

您忘记描述函数应该做什么,所以我假设您希望函数打印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;
    }
}