Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Ну темлейты это вообще отдельный разговор 02.03.05 11:56 Число просмотров: 1979
Автор: amirul <Serge> Статус: The Elderman
|
> template < struct T > > T func ( T val ) { return (val * val); } > > Не компилируется. Здесь class поменяли на struct.
Просто здесь недопустимо использование struct (можно только class и typename, которые в этом контексте взаимозаменямы).
С другой стороны, даже если в аргументах темплейта написано class, это не значит, что при инстанцировании нужно указывать именно класс. Пример:
template <class T>
void call_functor(T functor) {
functor();
}
class some_functor {
public:
void operator() () {}
};
void some_function() {
}
void
main() {
call_functor(some_functor());
call_functor(some_function);
call_functor(&some_function);
}
---
В первом вызове действительно создается функтор. Но остальные вызовы показывают, что можно использовать ЛЮБОЙ объект к которому применим оператор (). В том числе и функцию и указатель на функцию.
Короче, в списке аргументов шаблона используется не то слово class, которое используется для задания структуры (в терминах C++ - оно перегружено - overloaded). Например ключевое слово static перегружено как минимум пятью разными значениями и ничего - работает :-).
> ПС. Такой вопрос может быть на интервью, при поиске работы. Успехов на собеседовании
|
|
|