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

时间:2019-10-21 05:16:33

标签: c++

我有以下代码:

#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

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

1 个答案:

答案 0 :(得分:0)

某些功能的类型:

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

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

两种解决方法。

  1. 更改参数类型

  2. 使用lambda函数

相关帖子:std::thread calling method of class