GTKmm в Windows (портирование) - sigc::mem_fun возвращает ошибки из VC++ Express 2010 о выводе аргументов шаблона
Я пытаюсь перенести мое приложение 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 ответ
Непосредственное использование std::vector::push_back в качестве обработчика сигнала довольно амбициозно. Я не удивлен, что компилятор запутался.
Я бы просто использовал обычный метод-обработчик сигнала и вызывал vector::push_back() внутри этого метода.