从私有函数传递函数作为参数
Passing a function as argument from private function
我有以下代码:
#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
对类OtherClass1
和OtherClass2
的对象执行一些逻辑序列,其中这些类的对象由不同的函数处理,并且通常以向量形式出现。 我在编译时遇到错误:
error: invalid use of non-static member function ‘AStruct MainClass::Func1(const OtherClass1&)’
43 | AStruct v1 = Func(Func1, BS.vOC1);
虽然这可能是一个糟糕的解决方案(设计不佳的结果(,但为什么会出现上述错误?
某些函数的类型:
-&MainClass::Func1
:std::function<Astruct(const OtherClass1&)>*
-&MainClass::Func2
:std::function<Astruct(const OtherClass2&)>*
解决此问题的两种方法。
-
更改参数类型
-
使用λ函数
延伸阅读》std::类的线程调用方法
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 如何传递带有通过引用传递的结构参数的函数?
- 如何在 c++ 中将函数作为参数传递?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 为什么我不能将引用作为 std::async 的函数参数传递
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将__device__ lambda 作为参数传递给 __global__ 函数
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 将函数作为参数传递以避免重复代码
- 如何在类(C )中作为参数传递函数