Пример кода будет, вероятно, более наглядным:
class CDialog
{
CButton* ButtonPtr;
bool m_Visible;
void SomeMethod ();
}
class CButton
{
public:
std::tr1::function<void(void)> Function;
}
void CDialog::SomeMethod()
{
ButtonPtr = new CButton;
std::tr1::function<void(void)> TempF = [this]
{
this->m_Visible = false;
};
ButtonPtr->Function = TempF;
}
Теперь, когда я попытался вызвать TempF, оказалось, что он изменяет некоторую копию переменной m_Visible вместо реального значения.Я хотел спросить, является ли это поведением по умолчанию и есть ли способ использовать его таким образом.В моем исправлении использовались указатели, которые работали просто отлично, но мне любопытно, можно ли это сделать.
РЕДАКТИРОВАТЬ: я создал минимальный пример, и он работал.ошибка с не вызывающей функцией.
EDIT3: изменено, чтобы более точно соответствовать моей проблеме.Предположим, что функция CButton вызывается при нажатии кнопки, и это подтверждается.Все еще не работает.
EDIT4: Потребовалось некоторое время, чтобы изучить его с помощью отладчика.Значение указателя «this», используемого при создании функции, отличается от значения, используемого при вызове функции.Так я что-то не так сделал?
РЕДАКТИРОВАТЬ5: В моем коде обнаружена ошибка, которая исправила и объединила с ответами, что решило мою проблему.Спасибо за все ответы, сегодня я узнал что-то новое благодаря вам!