Nik*_*hin 7 c++ pointers function-pointers c++11
为什么这行不能编译:
function<const int&(const int&, const int&)> min_ptr = min<int>;
Run Code Online (Sandbox Code Playgroud)
但这很好用:
const int &(*min_ptr)(const int&, const int&) = min<int>;
Run Code Online (Sandbox Code Playgroud)
似乎函数类是灵活且舒适的替换函数指针.但为什么这个案子不起作用?
编辑.我的代码:
#include <functional>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
const int&(*min_ptr)(const int&, const int&) = min<int>; //It is works fine
function<const int&(const int &, const int&)> min_f = min<int>;// Doesn't compile
/*
Error message:
error: conversion from ‘<unresolved overloaded function type>’ to non-scalar type
‘std::function<const int&(const int&, const int&)>’ requested function<const int&(const int &, const int&)> min_f = min<int>;
*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc版本4.8.2, - std = c ++ 11
转让给
const int &(*min_ptr)(const int&, const int&)
Run Code Online (Sandbox Code Playgroud)
也铸成min<int>了特定的签名.演员std::function没有.
加
static_cast<const int &(*)(const int&, const int&)>
Run Code Online (Sandbox Code Playgroud)
在std::function分配得到它的工作.
auto* min_ptr = min<int>;
Run Code Online (Sandbox Code Playgroud)
也没有工作.
min<int>需要考虑多个重载.
std::function<const int&(const int &, const int&)> min_ptr =
[](auto&&...args)->decltype(auto){
return min<int>(decltype(args)(args)...);
};
Run Code Online (Sandbox Code Playgroud)
也适用于C++ 14.