簡體   English   中英

使用指向成員的指針將成員函數作為參數傳遞

[英]Using pointers to member to pass member function as arguments

#include <iostream>
#include <functional>

class Foo 
{
    public:
    Foo(int value)
    : value_(value){}
    void print()
    {
        std::cout << "member print: " << value_ << std::endl;
    }
    int value_;
};

void print()
{
    std::cout << "stand alone print" << std::endl;
}

template<typename F>
void execute(F&& f)
{
    f();
}

int main()
{ 

    execute(print);

    Foo foo(5);

    auto binded = std::bind(&Foo::print,foo);
    execute(binded);

    //auto Foo::* foo_print = &Foo::print;
    //execute(foo.*foo_print);

}

上面的代碼編譯並運行良好。

但是如果最后一部分使用了指向打印成員函數的指針的部分沒有被注釋掉,那么編譯就會失敗:

error: invalid use of non-static member function of type ‘void (Foo::)()’ 

代碼中是否存在語法錯誤,或者出於某種原因這是不可能的?

您不能傳遞非靜態成員函數來執行,因為它取決於this元素(因此它需要一個調用對象),而您可以使用lambda

execute([&](){foo.print();});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM