powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / куда совать bind2nd???
4 сообщений из 4, страница 1 из 1
куда совать bind2nd???
    #32491928
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверняка, что-то делаю не так, может кто подскажет как надо??

//функтор
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
куда совать bind2nd???
    #32493222
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попытка вызвать косвенно explicit-конструктор. (Сам не понял, что сказал )

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

Сначала надо создать, потом позвать. Или убрать explicit (кто и зачем его придумал?)
...
Рейтинг: 0 / 0
куда совать bind2nd???
    #32494738
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
куда совать bind2nd???
    #32495163
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИли убрать explicit (кто и зачем его придумал?)

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

string s = 'a';

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

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

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


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