Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mem_fun_ref и перегруженные методы класса 
V
    Опции темы
Kappac
Дата 16.6.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Доброго всем времени суток! 
Есть ли возможность сказать mem_fun_ref или mem_fun какой конкретно вариант функции использовать?

Пример:

Метод magick класса Image библиотеки ImageMagick перегружен:
string & magick();
void & magick(const string &);

Соответсвенно следующий код не компилится( компилятор: gсс версия 4.4.3 (Gentoo 4.4.3-r2 p1.2) ):

Код

#include <Magick++.h>
#include <vector>
#include <functional>
#include <algorithm>

using namespace Magick;
using namespace std;

vector<Image> images;

images.resize(3);

images.push_back(Image("file0.name"));
images.push_back(Image("file1.name"));
images.push_back(Image("file2.name"));

for_each( images.begin(), images.end(), bind2nd(mem_fun_ref(&Image::magick), "RGBA")) );



ошибка:
Код

вызов перегруженной функции ‘mem_fun_ref(<unresolved overloaded function type>)’ неоднозначен 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4/bits/stl_function.h:699: замечание: претенденты:
std::mem_fun1_ref_t<_Ret, _Tp, _Arg> std::mem_fun_ref(_Ret(_Tp::*)(_Arg)) [with _Ret = void, _Tp = Magick::Image, _Arg = const std::string&] 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4/bits/stl_function.h:684: замечание:
std::const_mem_fun_ref_t<_Ret, _Tp> std::mem_fun_ref(_Ret
(_Tp::*)()const) [with _Ret = std::string, _Tp = Magick::Image]
 

Вопрос: как решить эту задачу без написания собственного функтора и средствами STL, если возможно?

Это сообщение отредактировал(а) Kappac - 16.6.2010, 15:13
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
jonie
Дата 16.6.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



специализируйте шаблон явно:
Код

    mem_fun_ref<void>(&Image::magick);

например.
Для тех кто хочет попробывать вот вам простой код:
Код

using namespace std;

class Image
{
public:
    string & magick() {}
    void  magick(const string &) {}
};

int _tmain(int argc, _TCHAR* argv[])
{
    vector<Image> imgs;
    imgs.push_back(Image());
    imgs.push_back(Image());
    imgs.push_back(Image());

    vector <string> idx (imgs.size());

    mem_fun_ref(&Image::magick); //error here , что и понятно

    return 0;
}




--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Kappac
Дата 17.6.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 30.9.2006
Где: Украина, Киев

Репутация: нет
Всего: нет



Спасибо! 
--------------------
                                                                                     
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0433 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.