我有以下代码:
#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
和{{1}的对象执行某些逻辑顺序这些类的对象由不同的函数处理,通常以矢量形式出现。
编译时出现错误:
OtherClass2
虽然这可能是一个糟糕的解决方案(不良设计的结果),但为什么会出现上述错误?
答案 0 :(得分:0)
某些功能的类型:
-&MainClass::Func1
:std::function<Astruct(const OtherClass1&)>*
-&MainClass::Func2
:std::function<Astruct(const OtherClass2&)>*
两种解决方法。
更改参数类型
使用lambda函数