Я пишу библиотеку абстрактных классов на C++ для некоторых научных вычислений. В одном из классов я использую объект функции, чтобы передать его в качестве аргумента в числовом алгоритме. Я должен сделать это, как правило, для вычисления требуются дополнительные аргументы, которые я не могу передать в числовом алгоритме. Я успешно реализовал код, используя частный класс (вложенный класс) для построения объекта функции. Я пытаюсь переписать класс, используя lambdas для создания объектов функции, но я не уверен, как ограничить доступ к определенным переменным-членам в lambdas.C++ 11 член объекта функции лямбда
У меня есть простая программа, иллюстрирующая проблему, с которой я столкнулся.
#include <iostream>
#include <functional>
using namespace std;
class A
{
public:
A(int inI, int inJ) : _i(inI), _j(inJ)
{
create_functor();
}
A(const A& rtSide) : _i(rtSide._i),_j(rtSide._j)
{
create_functor();
}
A(A&& rtSide) : _i(rtSide._i), _j(rtSide._j)
{
rtSide.f = nullptr;
create_functor();
}
A& operator=(A&& rtSide)
{
_i = rtSide._i;
_j = rtSide._j;
create_functor();
rtSide.f = nullptr;
return *this;
}
A& operator=(A& rtSide)
{
if (this == &rtSide)
return *this;
_i = rtSide._i;
_j = rtSide._j;
create_functor();
rtSide.f = nullptr;
return *this;
}
~A() {}
void reset_i(const int& newI) { _i = newI; }
function<double(const double&)> f;
private:
void create_functor()
{
f = [this](const double& inX) -> double {return inX * static_cast<double>(_i); };
}
int _i;
int _j;
};
int main()
{
A _A1(2,0);
A _A2(1,0);
_A2 = _A1;
cout << _A2.f(2) << endl;
_A2.reset_i(4);
cout << _A2.f(2) << endl;
return 0;
}
Хотя приведенный выше код работает отлично, я не мог понять, как можно было бы ограничить доступ к внешней области только для переменного члена _i.
Любые мысли/предложения были бы высоко оценены.
просто из любопытства: почему вы хотите сделать это (ограничение доступа)? –
просто из любопытства ...;) – thanasis