Вы можете сделать следующее обходной путь :
class Blub {
public:
int i = 0;
std::function<void()> create() const {
return [my_this=const_cast<Blub*>(this)]() {
my_this->i = 100;
};
}
};
, но вводить в заблуждение изменение элемента данных в функции, которая фактически помечена как const
, поэтому я бы не стал предложите разработать свой класс таким образом.
Проверьте это live .
NB Стоит отметить, что const_cast
безопасен для используйте только если он используется для приведения переменной, которая изначально была не const
. Если переменная изначально const
, использование const_cast
может привести к неопределенному поведению. Итак, в следующем коде (который предоставил OP):
int main() {
Blub blub = Blub();
blub.create()();
std::cout << blub.i << std::endl;
return 0;
}
безопасно использовать const_cast
, потому что объект изначально сделан не-1023 *. Однако, если мы сделаем это const
, как в следующем коде:
int main() {
const Blub blub = Blub();
blub.create()();
std::cout << blub.i << std::endl;
return 0;
}
, это приведет к неопределенному поведению.