Загадочные типы int() и int(int)
От: brankovic  
Дата: 26.05.06 12:40
Оценка: :))
Вчера наткнулся на следующую запись:

template <class T> 
struct templ;

template <class R>
struct templ <R ()>
{
   //...
};

template <class R>
struct templ <R (int)>
{
   //...
};

...

//templ <int> t0;      //error!
templ <int ()> t1;     //Ok
templ <int (int)> t2;  //Ok


При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!
Re: Загадочные типы int() и int(int)
От: Аноним  
Дата: 26.05.06 12:46
Оценка:
Здравствуйте, brankovic, Вы писали:

B>Вчера наткнулся на следующую запись:


B>
B>template <class T> 
B>struct templ;

B>template <class R>
B>struct templ <R ()>
B>{
B>   //...
B>};

B>template <class R>
B>struct templ <R (int)>
B>{
B>   //...
B>};

B>...

B>//templ <int> t0;      //error!
B>templ <int ()> t1;     //Ok
B>templ <int (int)> t2;  //Ok

B>


B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!


Это типы callback функций.
Например int() — int test(){...}
Re: Загадочные типы int() и int(int)
От: _nn_ www.nemerleweb.com
Дата: 26.05.06 12:47
Оценка:
Здравствуйте, brankovic, Вы писали:

B>Вчера наткнулся на следующую запись:


B>
B>template <class T> 
B>struct templ;

B>template <class R>
B>struct templ <R ()>
B>{
B>   //...
B>};

B>template <class R>
B>struct templ <R (int)>
B>{
B>   //...
B>};

B>...

B>//templ <int> t0;      //error!
B>templ <int ()> t1;     //Ok
B>templ <int (int)> t2;  //Ok

B>


B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!


int — целое число.
int() == int(void) — функция, возвращающая int и принимающая void. — Вас же не смущает когда вы пишете: int f() == int (f)()
int(int) == int(int) — функция, возвращающая int и принимающая int. — Аналогично: int f(int) == int (f)(int).
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Загадочные типы int() и int(int)
От: Анатолий Широков СССР  
Дата: 26.05.06 12:47
Оценка:
B>[/code]

B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны?


int — тим int
R () — mип функции не принимающей аргументов и возвращающий R
R (int) — mип функции принимающей значение типа int и возвращающий R
Re: Загадочные типы int() и int(int)
От: Aera Беларусь  
Дата: 26.05.06 12:47
Оценка:
Здравствуйте, brankovic, Вы писали:

B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!


Тип int(int) имеет переменная объявленная так: int foo(int) — т.е. это функция
--
RedApe
Re: Загадочные типы int() и int(int)
От: Bell Россия  
Дата: 26.05.06 12:55
Оценка:
Здравствуйте, brankovic, Вы писали:

B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!


int - он и в Африке int
int() — функция, не принимающая параметров, и возвращающая int
int(int) — функция, принимающая один параметр типа int, и возвращающая int
Любите книгу — источник знаний (с) М.Горький
Re: Загадочные типы int() и int(int)
От: LaptevVV Россия  
Дата: 26.05.06 12:59
Оценка:
Здравствуйте, brankovic, Вы писали:

B>Вчера наткнулся на следующую запись:


B>
B>template <class T> 
B>struct templ;

B>template <class R>
B>struct templ <R ()>
B>{
B>   //...
B>};

B>template <class R>
B>struct templ <R (int)>
B>{
B>   //...
B>};

B>...

B>//templ <int> t0;      //error!
B>templ <int ()> t1;     //Ok
B>templ <int (int)> t2;  //Ok

B>


B>При этом такая специализация работает. Получается, что int, int(), int(int) — три разных типа, но что это за типы и зачем они нужны? В Страуструпе я такого не нашел — подскажите кто что знает, плиз!



Чего-то сдается мне, что судя по специализациям шаблона R() — вызов конструктора без аргументов
А R(int) — вызов конструктора инициализации...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Загадочные типы int() и int(int)
От: brankovic  
Дата: 26.05.06 13:05
Оценка:
Здравствуйте, _nn_, Вы писали:

__>int — целое число.

__>int() == int(void) — функция, возвращающая int и принимающая void. — Вас же не смущает когда вы пишете: int f() == int (f)()
__>int(int) == int(int) — функция, возвращающая int и принимающая int. — Аналогично: int f(int) == int (f)(int).

Смущает, когда я пишу 'int f ();' где-то между инструкциями. Но я проверил — вполне работает, если f() далее определена. Всё оказалось так просто, а я переживал...
Re[2]: Загадочные типы int() и int(int)
От: Анатолий Широков СССР  
Дата: 26.05.06 13:23
Оценка: :))) :))) :))
LVV>Чего-то сдается мне, что судя по специализациям шаблона R() — вызов конструктора без аргументов
LVV>А R(int) — вызов конструктора инициализации...
LVV>

Садитесь, два
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.