【问题标题】:How to use a function list to point to member function in a vector object?如何使用函数列表指向向量对象中的成员函数?
【发布时间】:2013-10-13 05:02:03
【问题描述】:
struct object
{
    void function()
    {
        std::cout << "function" << std::endl;
    }
};

int main()
{
    // create vectors for objects and functions)
    std::vector<object*> objectvec;
    std::vector<void*> functionlist;
    objectvec.push_back(new object);

    // create a pointer to an object's function

    void (object::* ptfptr_function) (void) = &object::function;
    functionlist.push_back(&ptfptr_tryfunc);

    // how do I call "functionvec[0]->tryfunc()" using the functionlist?
    // (following line does nothing:)

    functionlist[0];
}

【问题讨论】:

    标签: c++ function pointers vector member


    【解决方案1】:

    你想要这个:

    std::vector<void(object::*)()> functionlist;    // container
    
    functionlist.push_back(&object::function);      // add pointer-to-member-fn
    
    (objectvec[0]->*functionlist[0])();             // invoke ptmf on an instance
    

    【讨论】:

    • 这很有帮助,谢谢。我想它可以这样放在一个循环中: for (int i = 0; i*functionlist[i])();但它可以只是一个指向特定成员函数的指针而没有复合函数“(objectvec[i]->*functionlist[i])()”吗?就像一次调用 functionlist[i]();
    • @user2852086:不。成员函数不是函数。您不能调用成员函数。您只能将它与一个对象结合以在该对象上调用它。将其视为“您班级的抵消”。如果要将特定对象绑定到成员函数,请使用 std::mem_fnstd::bind 或 lambda。
    • 我可以看看“std::mem_fn or std::bind or a lambda”的例子吗?
    • @user2852086:你能自己搜索一下吗?对cmets来说有点多。 auto f = std::mem_fn(&amp;object::function) 成为 object&amp; 的函数,例如用法为f(objectvec[0])。使用bind,您可以创建一个可调用实体,如auto g = std::bind(&amp;object::function, objectvec[0]);,用法:g()
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2012-02-10
    相关资源
    最近更新 更多