通过的std ::功能包重载函数(Wrap overloaded function via std:

2019-06-23 13:26发布

我有一个重载函数,我想一起包裹在一个std ::函数传递。 GCC4.6没有找到“匹配功能”。 虽然我没有在这里找到一些问题的答案是不明确的,因为我想他们。 有人能告诉我,为什么下面的代码不能扣除正确的过载和如何(优雅)解决它?

int test(const std::string&) {
    return 0;
}

int test(const std::string*) {
    return 0;
}

int main() {
    std::function<int(const std::string&)> func = test;
    return func();
}

Answer 1:

这是不明确的情况。

为了消除歧义,请使用显式转换为:

typedef int (*funtype)(const std::string&);

std::function<int(const std::string&)> func=static_cast<funtype>(test);//cast!

现在,编译器将能够消除歧义的情况下,根据中投的类型。

或者,你可以这样做:

typedef int (*funtype)(const std::string&);

funtype fun = test; //no cast required now!
std::function<int(const std::string&)> func = fun; //no cast!

那么,为什么std::function<int(const std::string&)>不上班的路上funtype fun = test工作上面?

那么答案是,因为std::function可以与任何对象进行初始化,因为它的构造是模板化是独立的,你传递给模板参数的std::function



文章来源: Wrap overloaded function via std::function