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

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

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

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

24.05.2014, 09:04. Просмотров 224. Ответов 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 (C++):

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

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

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

STL - C++
Всем привет :) Задача следующая - Нужно считать из файла строки, запихнуть их в стек и вывести на экран, чтобы перед ними был номер...

STL. - C++
Всем доброго времени суток. У меня имеется два вопроса. 1) У нас имется квадратная матрица. И чтобы найти в строках, к примеру,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
24.05.2014, 09:22 #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,997
24.05.2014, 09:33  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
struct Shower { void operator()(int v) { std::cout << v << std::endl; } void operator()(std::string s) { std::cout << s << std::endl; } };
блин а ведь видел я такой приём уже, но забыл=))
спасибо!)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 09:33
Привет! Вот еще темы с ответами:

STL - C++
помогите сделать ввод ФИО и возраста через STL .Вот часть моего кода#include &lt;string&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include...

STL - C++
Здравствуйте. Ребят пожалуйста решите 2 простенькие задачки, потратьте немного своего времени, очень прошу. Заранее огромное спасибо...

STL - C++
Блин нарорд... я затупил по жоскому.... у меня std::vector, пытаюсь добавить элемент на n-e место: using namecpace std; ...

STL - C++
std::vector&lt;char*&gt; files; Объясните пожалуйста как правильно заполнять такой вектор


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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