@LarichevV

Указатель на функцию C++?

Всем доброго времени суток. Столкнулся с такой проблемой, объявил указатель на функцию класса, но функция не работает.
Вот функция:
void CodeGenerator::AddLineToBody(string str)
{
    bodyASM += str;
    bodyASM += "\n";
}


Вот написал объявление:
void (CodeGenerator::*AddLine)(string);
AddLine = &CodeGenerator::AddLineToBody;
class CodeGenerator *stroka = new CodeGenerator;
(stroka->*AddLine)("str");


В чем ошибка?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Могу ошибаться, но вроде бы вам надо передавать указатель на функцию в конкретном экземпляре.
А что значит "не работает"? Какие ошибки?
Ответ написан
Andy-C
@Andy-C
Этот код работает предсказуемо. Смотрите вокруг и всякие побочные эффекты.
#include <iostream>
#include <string>

class proc
{
    private:
         std::string _str;
    public:
    proc(const std::string str=""):_str(str){}
    void add_line(const std::string& str)
    {  _str += (str + "\n"); }
    const std::string& get_str() const 
    { return _str; }
};

int main()
{
    void (proc::*al)(const std::string&);
    al = &proc::add_line;

    proc* runer = new proc("1. <start_line>\n");
    
//    std::cout<<runer->get_str();
    (runer->*al)("2. <new_line>");
    std::cout<<runer->get_str()<<std::endl;
    return 0;
}


ЗЫ. Если указатель надо хранить передавать см. std::mem_fn, а лучше - boost::function
Ответ написан
Комментировать
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
нет ошибка
https://ideone.com/xCMIUT
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы