从私有函数传递函数作为参数

Passing a function as argument from private function

本文关键字:参数 传递函数 函数      更新时间:2023-10-16

我有以下代码:

#include <iostream>
#include <vector>
#include <string>
#include <functional>
using namespace std;
struct AStruct {
string astr;
};
class OtherClass1 {
public:
OtherClass1(string s) : str(s) {};
string str; 
};
class OtherClass2 {
public:
OtherClass2(string s) : str(s) {};
string str; 
};
struct BStruct {
vector<OtherClass1> vOC1;
vector<OtherClass2> vOC2;
};

class MainClass {
public:
MainClass() {};
void Update(const BStruct& BS) {
AStruct v1 = Func(Func1, BS.vOC1);
AStruct v2 = Func(Func2, BS.vOC2);
cout << "v1 = " << v1.astr << endl;
cout << "v2 = " << v2.astr << endl;
}
private:
AStruct Func1(const OtherClass1& oc1) { 
AStruct AS;
AS.astr = oc1.str + " oc1 ";
return AS;
}
AStruct Func2(const OtherClass2& oc2) { 
AStruct AS;
AS.astr = oc2.str + " oc2 ";
return AS;
}
// AStruct Func3(const OtherClass3& oc3); ...
template <typename T>
AStruct Func(function<AStruct(const T&)> Funky, const vector<T>& Foos) {
AStruct ast;
for (size_t i = 0; i < Foos.size(); ++i) 
ast = Funky(Foos[i]);
return ast;
}
};

请忽略函数的愚蠢,这是我能想到的最简单的。这个想法是Func对类OtherClass1OtherClass2的对象执行一些逻辑序列,其中这些类的对象由不同的函数处理,并且通常以向量形式出现。 我在编译时遇到错误:

error: invalid use of non-static member function ‘AStruct MainClass::Func1(const OtherClass1&)’
43 |             AStruct v1 = Func(Func1, BS.vOC1);

虽然这可能是一个糟糕的解决方案(设计不佳的结果(,但为什么会出现上述错误?

某些函数的类型:

-&MainClass::Func1std::function<Astruct(const OtherClass1&)>*

-&MainClass::Func2std::function<Astruct(const OtherClass2&)>*

解决此问题的两种方法。

  1. 更改参数类型

  2. 使用λ函数

延伸阅读》std::类的线程调用方法