2016-05-11 2 views
1

У меня есть следующий фрагмент кода: Как вызвать функцию-член в выводе области.Вызов функции объекта в области увеличения объема

class A 
{ 
public: 
    void foo(); 
    void bar(); 
}; 

void A::foo() 
{ 
    BOOST_SCOPE_EXIT(void) 
    { 
     bar(); // Does not compile 
    } 
    BOOST_SCOPE_EXIT_END 
} 

void A::bar() {} 

void foo4() 
{ 
    A a;  
    a.foo(); 
} 

Err сообщение

boost_scope_exit.cpp: In static member function ‘static void 
A::foo()::boost_se_guard_t_71::boost_se_body()’: 
boost_scope_exit.cpp:73:13: error: cannot call member function ‘void   
A::bar()’ without object 
    bar(); // Does not compile 
     ^

Как я могу вызвать функцию-член из области выхода.

Найденный ответ в документации повышающего:

Boost docs

Просто поиск «Захват объекта это»

+0

Я не использовал 'BOOST_SCOPE_EXIT', но глядя на документацию, что я думаю, что вам нужно, это' BOOST_SCOPE_EXIT (и это) { this-> бар(); } BOOST_SCOPE_EXIT_END' –

ответ

2

Ваш код будет работать, если вы сделаете бар статический (и вызвать A :: бар()).
Если это не вариант, похоже, вам нужно зафиксировать этот указатель с помощью специального символа this_ (обратите внимание на нижнее подчеркивание).

BOOST_SCOPE_EXIT(this_) 
{ 
    this_->bar(); // note trailing underscore on this_ 
} 
BOOST_SCOPE_EXIT_END 
+0

-> ошибка: 'this_' не был объявлен в этой области; Кажется, зависит от версии или компилятора. – Sven

Смежные вопросы