如何在c ++中将函数作为类构造函数的参数传递

时间:2017-06-05 17:08:12

标签: algorithm c++11 data-structures

我正在尝试实施有序的多地图。 但我需要提供一个函数来比较multimap包含的内容。

例如:

bool compare(string a, string b) { return a<b; }
bool compare2(string a, string b) { return a.size()<b.size(); }


class MultiMap
{
 private:
    toCompare( string a, string b); 

 public:
    MultiMap(function) { toCompare = function };


}

所以我想通过给定的函数在multimap中设置顺序。

有没有办法,也许有一些指向函数的指针。 希望你明白我想做什么,如果不随意问。

另外,请注意这不是真正的代码,只是我写的一个想法。

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用std::function,例如:

class MultiMap
{
 private:
    std::function<bool(string,string)> toCompare;

 public:
    MultiMap(std::function<bool(string,string)> function) : toCompare(std::move(function)) {}

    bool compare(string a, string b) {
        return toCompare(a,b);
    }

};

int main(int argc, char** argv) {
 MultiMap mm(compare);
 mm.compare("asd", "Da");
}

或者使用函数指针:

// Define function type
using compare_func = bool(string,string);

class MultiMap
{
 private:
    compare_func* toCompare;    
 public:
    // Constructor accepts pointer to functiontype
    MultiMap(compare_func* function) : toCompare(function) { }

    bool compare(string a, string b) {
        return toCompare(a,b);
    }

};

int main(int argc, char** argv) {
 MultiMap mm(compare);
 mm.compare("asd", "Da");
}