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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::bind - bind шаблонного метода, без указания типа, возможно ли? 
V
    Опции темы
azesmcar
Дата 29.9.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Добрый день,

есть такой код
Код

template <typename X>
void foo(const std::string& name, X x)
{
    std::cout << name << " - " << x << std::endl;
}

нужно создать функтор с ОДНИМ аргументом, т.е. в качестве первого аргумента передавать какой-то string, а в качестве второго то, что передано. Поскольку функция шаблонная и принимает аргумент шаблонного типа то можно конкретный тип в нее не передавать, т.е.
Код

foo("some_name", 10); // все равно что foo<int>

но для bind -а нужно указывать к какой именно функции идет bind
Код

boost::bind(foo<int>, "some_name", _1)(10);

несмотря на то, что я не указываю конкретного типа аргумент, а передаю туда _1 (из которого он потом может вычислить тип шаблона). Я полагаю bind НЕ предоставляет подобной функциональности и написал обходное решение в виде
Код

struct wrapper
{
    std::string name;

    wrapper(const std::string& n) : name(n) {}

    template <typename T>
    void operator()(const T& v) const
    {
        std::cout << name << " - " << x << std::endl;
    }
};

но не покидает чувство, что что-то для этого в boost-е придумано smile 

Это сообщение отредактировал(а) azesmcar - 29.9.2010, 15:27
PM   Вверх
bsa
Дата 29.9.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



результатом работы bind является объект полностью завершенного типа. А передаваемый параметр будет известен несколько позже.
PM   Вверх
azesmcar
Дата 30.9.2010, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(bsa @  29.9.2010,  22:23 Найти цитируемый пост)
результатом работы bind является объект полностью завершенного типа. А передаваемый параметр будет известен несколько позже. 

Я понимаю, потому и думаю, что bind не предоставляет такой возможности. Но может что нибудь все таки есть и как-то можно обойтись без вспомогательного функтора.
PM   Вверх
EnergoHokum
Дата 1.10.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В данном случае работает (пытается работать) механизм вывода типов шаблонных параметров функции. Из сообщений об ошибках я понял, что вывести корректно эти параметры ему, в данном случае, не удаётся. Вот он и просит помощи самого программиста. Изменить ситуацию, наверное, можно лишь допиливанием самого компилятора.
PM MAIL ICQ   Вверх
Леопольд
Дата 1.10.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

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



Цитата(azesmcar @  29.9.2010,  15:17 Найти цитируемый пост)
но не покидает чувство, что что-то для этого в boost-е придумано
А мне кажется что нет... smile




--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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