Я был в восторге, когда лямбда-выражения (LE) стали частью gcc, начиная с 4.5.1, и надеялся, что они предоставят способ избавиться от этих неприятных указателей на функции в C++, которые, насколько я понимаю, в основном были скомпилированы как функции C. Все эти статические объявления и т.д...
Теперь я хотел использовать ЛЭ в классе, где можно выбрать метод вычисления функтором. Но из-за определения в предложении для C++1x это кажется вообще невозможным. Вот код и проблема(ы).
testLE.h
#include<functional>
typedef std::function<double(double, double)> tMyOp;
class testLE
{
public:
testLE(){ m_oFactor = 2.5; }
void setOp(const int i)
{
if (i > 0) {myOp = plus;} else {myOp = minus;}
}
double eval(double x, double y) { return myOp(x, y); }
private:
double m_oFactor;
tMyOp plus;
tMyOp minus;
tMyOp myOp;
};
testLE.cpp
#include "testLE.h
tMyOp testLE::plus = [](double x, double y) -> double
{
return m_oFactor*(x + y);
};
tMyOp testLE::minus = [](double x, double y) -> double
{
return m_oFactor*(x - y);
};
Итак, проблема в том, что это не скомпилируется, если я не объявлю функторы _myOp, _minus и _plus статическими, но как только я это сделаю, у меня больше не будет доступа к переменным-членам (в данном случае фактор). И использование [this] вместо [] в определении функторов тоже не работает.
Честно говоря, imho это хуже, чем альтернатива с указателем на функцию.... Так что я был бы очень рад помощи, но чтение спецификаций для LE в новом стандарте не дает особых надежд.
Спасибо и наилучшие пожелания, Энди