【问题标题】:std::vector that holds class methods保存类方法的 std::vector
【发布时间】:2015-02-03 07:37:43
【问题描述】:

我这样做是为了列举我的班级成员

enum MemberType {A, B, C, D};

class Hello
{
public:
    std::vector<std::function<void(Hello*, void)>>     m_members;

    void func()
    {
    };

    Hello()
    {
        m_members[A] = func();
    }
};

这里有什么问题?

【问题讨论】:

    标签: c++ vector enums std std-function


    【解决方案1】:

    首先,你有一个额外的void

    std::vector<std::function<void(Hello*)>>     m_members;
    

    然后,您需要分配更多类似这样的内容:

    m_members[A] = &Hello::func;
    

    或者您可以存储绑定函数,在这种情况下为std::function&lt;void()&gt;std::bind(&amp;Hello::func, this)

    【讨论】:

    • 我的代码有问题,我想解决方案在这里:stackoverflow.com/questions/12145035/… 我应该在那里添加std::mem_fn,但我不知道它是什么,以及为什么你的代码没有工作。
    【解决方案2】:

    1) 在调用m_members[A] = ... 之前,您需要在vector 中预留空间:) 无论如何,以下是您可以让事情顺利进行的方法:

    class Hello
    {
    public:
        std::vector<void(Hello::*)()> m_members;
    
        void func()
        {
            cout << "func" << endl;
        };
    
        Hello()
        {
            m_members.push_back(&Hello::func);
        }
    };
    
    int main()
    {
        Hello obj;
        (obj.*obj.m_members[A])();
        std::cin.get();
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-30
      • 2017-08-22
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多