Разрешение имен перегруженных функций
От: Undead  
Дата: 28.10.04 16:55
Оценка:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

void f(int n)
{
    cout << "f(int)\n";
}

void f()
{
    cout << "f(void)";
}

int main()
{
    typedef void (*Fun)(int);
    vector<int> v(5);
    //for_each(v.begin(), v.end(), f);    // не работает
    for_each(v.begin(), v.end(), static_cast<Fun>(f));
}


Насколько такой прием соответствует стандарту?
Re: Разрешение имен перегруженных функций
От: Юнусов Булат Россия  
Дата: 28.10.04 17:09
Оценка: :)
Здравствуйте, Undead, Вы писали:

U>Насколько такой прием соответствует стандарту?


MaximE часто такие примеры приводит, никто не ругается значит соответcвует

Так еще можно: boost::bind<void,int>(f, _1)
Re[2]: Разрешение имен перегруженных функций
От: Undead  
Дата: 28.10.04 18:55
Оценка:
Здравствуйте, Юнусов Булат, Вы писали:

ЮБ>Здравствуйте, Undead, Вы писали:


U>>Насколько такой прием соответствует стандарту?


ЮБ>MaximE часто такие примеры приводит, никто не ругается значит соответcвует


ЮБ>Так еще можно: boost::bind<void,int>(f, _1)


Действительно, что-то я туплю, ведь в любом случае можно написать что-то вроде:

template <typename T>
T fictive_cast(T t)
{
    return t;
}
...
typedef void (*Fun)(int);
vector<int> v(5);
for_each( v.begin(), v.end(), fictive_cast<Fun>(f) );


и будет правильно работать
Re: Разрешение имен перегруженных функций
От: Павел Кузнецов  
Дата: 28.10.04 21:32
Оценка: 1 (1) :)
Undead:

>
> #include <algorithm>
> #include <iostream>
> #include <vector>
> using namespace std;
>
> void f(int n)
> {
>     cout << "f(int)\n";
> }
>
> void f()
> {
>     cout << "f(void)";
> }
>
> int main()
> {
>     typedef void (*Fun)(int);
>     vector<int> v(5);
>     //for_each(v.begin(), v.end(), f);    // не работает
>     for_each(v.begin(), v.end(), static_cast<Fun>(f));
> }
>

> Насколько такой прием соответствует стандарту?

Выбор из перегруженных функций с помощью static_cast — на 100% (13.4). Использование operator<< без явного включения <ostream> — на 99.9%
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.