std::function 和友元函数

std::function and friend function

在这个例子中,我有一个函数指针 (std::function) 作为我 class 的属性。所以我可以将 void myFunction(void) 形式的任何函数关联到我的 class.

#include <iostream>
#include <functional>

class Example{
private:
    int variable=4;
public:
    std::function<void(void)> myNonMemberFunction;
    Example(void){
    }
    Example(std::function<void(void)> MyNonMemberFunction){
        myNonMemberFunction=MyNonMemberFunction;
    }
};

void PrintPlop(){
    std::cout<<"plop"<<std::endl;
}

int main() {
    Example example(PrintPlop);
    example.myNonMemberFunction();
}

现在,我想做同样的事情,但是使用一个可以访问 class 属性的函数,例如友元函数或 class 成员函数。我该怎么做?

所以你想让你传递给构造函数的任何函数成为朋友?

严格意义上是不可能的,因为访问级别(friend or not)是编译时的问题,传递给构造函数的值一般来说只在运行中确定-时间。

因此,您要么将所有相关函数声明为友元(在这种情况下为什么不直接将它们设为方法?),要么将私有成员作为附加参数传递给它们。像这样:

class Example{
private:
    int variable=4;
    std::function<void(int)> myNonMemberFunction;
public:
    Example(void){
    }
    Example(std::function<void(int)> MyNonMemberFunction){
        myNonMemberFunction=MyNonMemberFunction;
    }
    void callMyNonMemberFunction() {
      myNonMemberFunction(variable);
    }
};

void PrintPlop(int v){
    std::cout<<"plop"<< v << std::endl;
}

int main() {
    Example example(PrintPlop);
    example.callMyNonMemberFunction();
}