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

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

Восстановить пароль Регистрация
 
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
24.05.2014, 09:04     Перегрузка функторов в STL #1
Просто любопытно, заметил такую вещь:
есть скажем перегруженая функция 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
STL C++
STL C++
C++ STL
STL C++
C++ STL
C++ STL
C++ Перегрузка умножения вектора (STL) на вещественное число

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
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; } };
блин а ведь видел я такой приём уже, но забыл=))
спасибо!)
Yandex
Объявления
24.05.2014, 09:33     Перегрузка функторов в STL
Ответ Создать тему
Опции темы

Текущее время: 01:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru