使用函子和函数指针有什么区别.例如
//Functor
struct add_x
{
int x;
add_x(int y):x(y){}
int operator()(int y)
{
return x+y;
}
};
//Function
int (func)(int x)
{
return ++x;
}
std::vector<int> vec();
//fill vec with 1 2 3 4 5
int (*f)(int) = func;//Function pointer
std::transform(vec.begin(),vec.end(),f); //approach 1
std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2
Run Code Online (Sandbox Code Playgroud)
这两种方法都有效,但我确信会有一种方法比其他方法更受欢迎(或可能).
为什么不是一个仿函数而不是像下面的myless这样的模板化函数?为什么委员会决定这一点以及我可以在哪里进一步阅读?C++ 11标准也解释了为什么委员会做出了某些决定?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#if 1
template <class T> struct stdless {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
#else
#define stdless std::less
#endif
//bool myless(int a, int b) { return a<b; }
template<class T>
bool myless(T a, T b) { return a<b; }
int main()
{
vector<int> a{5, 3, 1,6};
myless(5, 6);
stdless<int>()(5, 6);
auto fn1=stdless<int>();
fn1(5,9);
auto …Run Code Online (Sandbox Code Playgroud)