GTKmm в Windows (портирование) - sigc :: mem_fun возвращает ошибки из VC ++ Express 2010 о выводе аргументов шаблона - PullRequest
0 голосов
/ 19 декабря 2011

Я пытаюсь перенести мое приложение GTKmm, разработанное в Linux, на Windows. У меня есть древовидная структура с несколькими вариантами выбора, и мне нужно получить эти выборки в std :: vector. Код, который я использую (и он прекрасно работает в Linux):

        std::vector<Gtk::TreeModel::iterator> rows;
    mp_FileDetailsTree->treeSelection()->selected_foreach_iter(
        sigc::mem_fun(rows, &std::vector<Gtk::TreeModel::iterator>::push_back)
        );

Однако в Windows (Visual C ++ Express 2010) я часто получаю эту ошибку (повторяется довольно часто):

error C2784: 'sigc::bound_const_volatile_mem_functor7<T_return,T_obj,T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7> sigc::mem_fun(T_obj &,T_return (__thiscall T_obj2::* )(T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7) volatile const)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
      c:\devel\gtkmm\include\sigc++-2.0\sigc++\functors\mem_fun.h(6196) : see declaration of 'sigc::mem_fun'

Прямо в строке sigc :: mem_fun.

Есть идеи, как я могу это исправить? Поиск в Google ничего полезного не дал :(. Я использую GTKmm 2.22 (полный установщик Windows).

1 Ответ

1 голос
/ 03 января 2012

Непосредственное использование std :: vector :: push_back в качестве обработчика сигнала довольно амбициозно.Я не удивлен, что компилятор в замешательстве.

Я бы просто использовал обычный метод-обработчик сигнала и вызывал vector :: push_back () внутри этого метода.

...