Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
#1

Перегрузка функторов в STL - C++

24.05.2014, 09:04. Просмотров 223. Ответов 2
Метки нет (Все метки)

Просто любопытно, заметил такую вещь:
есть скажем перегруженая функция show(int &a) и show(string& a)
есть контейнер list<int> b или любой аналогичный, есть for_each(b.begin(),b.end(),show) который я хочу использовать, если закомментить 2ой show(string& ) то всё ок, если же функция перегружена, то выдаёт ошибку.
Помнится что при перегрузке функции компилятор немного "видоизменяет" их названия чтобы различать(по этой причине вроде и в dll файлах перегрузку использовать нельзя, не суть)
1) от этого ли ошибка?
2) есть лекарство или писать отдельный функтор надо?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 09:04     Перегрузка функторов в STL
Посмотрите здесь:

Перегрузка умножения вектора (STL) на вещественное число - C++
Приветствую всех. Помогите пожалуйста перегрузить операцию умножения вектора на число (все координаты вектора умножаются на данное число); ...

Книги по STL - C++
Доброго времени суток. Интересует ваше мнение, по какой книге лучше изучать STL? В списке литературы (да да, я его читал!) есть 3 книги....

stl в VS 2008 - C++
vector &lt;int&gt; size; deque &lt;int&gt; COUNTER; вылазиют ошибки синтаксическая ошибка: отсутствие &quot;;&quot; перед &quot;&lt;&quot; отсутствует спецификатор...

STL deque - C++
Устройство, основные операции и их стоимость, особенности использования deque. Ни где не могу найти стоимость выполнения основных...

STL и поток - C++
Есть вектор, объявленный в основной программе, состоящий из ссылок на компоненты типа TImage и TCheckBox: struct mass { TImage *img; ...

BOOST_FOREACH на STL - C++
подскажите как переписать такую конструкцию на STL std::map&lt;IObserver* const, IObserver* const&gt; _observers; typedef...

STL :: map - C++
Столкнулся с такой проблемой: Нужно вставить в отсортированную map-таблицу элемент. Использую: myMap.insert(myIterator,pair&lt;type1,...

Шаблоны STL - C++
Здраствуйте. У меня задача такая: робота со стандарными шаблонами. Мне нужно заполнить контейнер пользовательским типом даных, тоесть ...

Контейнеры STL - C++
Кто знает где найти информацию по поводу стандартных контейнеров STL? Интересует не то, как их применять, а основы реализации. Может быть...

Материалы по STL - C++
добрый день, столкнулся с такой проблемой. Пытаюсь разобраться с STL, в книжках все красиво гладко, но когда сталкиваешься с реальными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
24.05.2014, 09:22     Перегрузка функторов в STL #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Просто неоднозначный вызов получается. Уродливый вариант обхода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <string>
 
void show(int v) {
    std::cout << v << std::endl;
}
 
void show(std::string s) {
    std::cout << s << std::endl;
}
 
int main() {
    std::vector<int> v {1, 3, 4, 5};
    std::for_each(v.begin(), v.end(), static_cast<void(*)(int)>(show));
    return 0;
}
Добавлено через 1 минуту
Вариант без каста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
#include <string>
 
struct Shower {
    void operator()(int v) {
        std::cout << v << std::endl;
    }
    
    void operator()(std::string s) {
        std::cout << s << std::endl;
    }   
};
 
int main() {
    std::vector<int> v {1, 3, 4, 5};
    std::for_each(v.begin(), v.end(), Shower());
    return 0;
}
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
24.05.2014, 09:33  [ТС]     Перегрузка функторов в STL #3
Цитата Сообщение от 0x10 Посмотреть сообщение
struct Shower { void operator()(int v) { std::cout << v << std::endl; } void operator()(std::string s) { std::cout << s << std::endl; } };
блин а ведь видел я такой приём уже, но забыл=))
спасибо!)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru