题目:
auto x = sq(3.14); 实现sq,用所有你能想到的方法,看看有多少种?
题目要求实现一个函数,故利用C++可有6种实现方法。具体如下:
1、宏定义
#define sq(x) ((x) * (x))
2、直接声明函数
double sq(double x){ return x * x; };
3、利用类中的函数对象即对运算符()进行重载来实现要求
class A{
public:
A();
double operator() (double x){ return x * x; };
virtual ~A();
};
int main(){
A sq;
auto x = sq(3.14);
}
4、利用结构体,对运算符()进行重载来实现要求(其实结构体和类行为上较类似)
struct A{
double operator() (double x){ return x * x; };
};
int main(){
struct A sq;
auto x = sq(3.14);
}
5、利用函数模版来实现要求
template <typename name>
name sq(name x){ return x * x; };
6、利用lambda表达式来实现要求(匿名函数,lambda是C++11引入的新特性)
实现一:
auto sq = [](double x){ return x * x; };
实现二:
std::function<double(double)> sq = [](double x){ return x * x; };