Я был в восторге, когда лямбда-выражения (LE) были частью gcc, начиная с 4.5.1, и надеялся, что они дадут способ избавиться от этих неприятных указателей на функции в C ++, которые, на мой взгляд, были скомпилированы какС функции.Все эти статические объявления и т.д ...
Теперь я хотел использовать LE в классе, где можно выбрать метод вычисления с помощью функтора.Но из-за определения в предложении для 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 в новом стандарте не дает особых надежд.
Спасибо и наилучшие пожелания, Энди