我对 C++11 特性比较陌生。我对自动功能以及它如何类型推导函子有疑问。考虑以下代码片段:
bool test1(double a, double b) {
return (a<b);
}
bool test2(double a, double b) {
return (a>b);
}
struct Test1 {
bool operator()(double a, double b) {
return (a<b);
}
};
struct Test2 {
bool operator()(double a, double b){
return (a>b);
}
};
int main() {
const bool ascending = false;
auto comparator = ascending? test1:test2; // works fine
auto comparator2 = ascending? Test1():Test2(); // compiler error: imcompatible types
std::function<bool(double, double)> comparator3 = ascending? Test1():Test2(); // compiler error: imcompatible types;
}
虽然 auto (和 std::function )适用于函数,但它对于函数对象失败(类型推断)。为什么是这样?我在这里遗漏了一些基本的 wrt 类型推断。
(我正在使用 Visual Studio 2012)