Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / куда совать bind2nd??? / 4 сообщений из 4, страница 1 из 1
22.04.2004, 14:55
    #32491928
tanex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
куда совать bind2nd???
Я наверняка, что-то делаю не так, может кто подскажет как надо??

//функтор
template<class R, class CP> class premium_fun_t2 : public binary_function<CP*, unsigned short, R>
{
R(CP::*pmf)();
public:
string sResult;

explicit premium_fun_t2(R(CP::*p)()):pmf(p){}

R operator() (CP* p, unsigned short premium)
{
......

return 0;
}
};

//объект
template <class R, class CP> premium_fun_t2<R, CP> premium_fun2(R(CP::*f)(), unsigned short premium)
{
return bind2nd(premium_fun_t2<R, CP>(f), premium);
}

//тогда в программе

for_each(vector_person.begin(), iter_last,
premium_fun2((&CPerson::AddPremium), size_premium)); //ошибка

//а если:

template <class R, class CP> premium_fun_t2<R, CP> premium_fun2(R(CP::*f)())
{
return premium_fun_t2<R, CP>(f);
}

//в программе:

for_each(vector_person.begin(), iter_last,
bind2nd(premium_fun_t2<unsigned short, CPerson>(&CPerson::AddPremium), premium); //тоже ошибка

а куда этот bind2nd еще совать я уже не знаю
???
...
Рейтинг: 0 / 0
23.04.2004, 09:54
    #32493222
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
куда совать bind2nd???
Попытка вызвать косвенно explicit-конструктор. (Сам не понял, что сказал )

Короче,
explicit premium_fun_t2
может быть вызван только непосредственно, то есть попытка создать объект, как параметр функции не пройдёт.

Сначала надо создать, потом позвать. Или убрать explicit (кто и зачем его придумал?)
...
Рейтинг: 0 / 0
23.04.2004, 17:10
    #32494738
tanex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
куда совать bind2nd???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
//функтор 
template<class R, class CP> class premium_fun_t2 : public binary_function<CP*, unsigned short, R> 
{ 
R(CP::*pmf)(); 
public: 
string sResult; 

explicit premium_fun_t2(R(CP::*p)()):pmf(p){} 

R operator() (CP* p, unsigned short premium) 
{ 
...... 

return  0 ; 
} 
}; 

//объект 
template <class R, class CP> premium_fun_t2<R, CP> premium_fun2(R(CP::*f)(), unsigned short premium) 
{ 
return bind2nd(premium_fun_t2<R, CP>(f), premium); 
} 

//тогда в программе 

for_each(vector_person.begin(), iter_last, 
premium_fun2((&CPerson::AddPremium), size_premium)); //ошибка 

//а если: 

template <class R, class CP> premium_fun_t2<R, CP> premium_fun2(R(CP::*f)()) 
{ 
return premium_fun_t2<R, CP>(f); 
} 

//в программе: 

for_each(vector_person.begin(), iter_last, 
bind2nd(premium_fun_t2<unsigned short, CPerson>(&CPerson::AddPremium), premium); //тоже ошибка 

...
Рейтинг: 0 / 0
24.04.2004, 00:30
    #32495163
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
куда совать bind2nd???
авторИли убрать explicit (кто и зачем его придумал?)

Понимаю что скорее всего это стёб, но на всякий случай: кто придумал - дак наверно БС и придумал. Зачем? Допустим есть класс string с конструктором типа string(int n){/*....*/}, который создаёт пустую строку длинной n символов. Что будет если к. нибудь наивняк напишет:

string s = 'a';

будет вот что:

string s = string((int)'a');

вопрос в том, то ли это что он/она имел/а в виду? Вряд ли. А если объявить explicit string(int); то компайлер отловит врага ещё на дальних подступах к столице нашей Родины. Вот примерно так объясняет это БС.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / куда совать bind2nd??? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]