template Run(T process);В тесте спрашивается, что именно эта конструкция может означать: нешаблонную функцию-член класса, определение шаблонной функции, объявление шаблонной функции, определение шаблонного класса, объявление шаблонного класса?
Поначалу решил - ошибка. Разве есть конструкции со словом template без скобочек? Но в памяти что-то смутно зашевелилось :) Полез в справочник по шаблонам (есть такая замечательная книжка - Дэвид Вандевурд, Николаи М. Джосаттис, "Шаблоны С++", 2003 год). И нашел такую конструкцию. Называется - директива явного инстанцирования (стр. 87). Сравните:
template int const& max(int const&, int const&);Это - явное инстанцирование шаблона функции max() для int. Таким образом, "template Run(T process);" может означать следующее: явное инстанцирование шаблона функции Run, принимающего один параметр типа T и возвращающего int.
C неявным int, правда, есть проблема. Стандарт С++ не поддерживает default int. В частности, в Visual C++ 2005 при попытке откомпилировать объявления функции, в которой не указан возвращаемый тип, мы получаем ошибку C4430: "missing type specifier - int assumed. Note: C++ does not support default-int". В более ранних версиях компилятора такие конструкции были разрешены. Ошибку можно исключить с помощью pragma, поэтому следующий код компилируется на ура:
Осталось ответить на вопрос теста. Собственно, выбирать остается между вариантами 2 и 3. В справочнике написано следующее: "Директива явного инстанцирования содержит ключевое слово template, за которым следует объявление объекта, экземпляр которого необходимо сгенерировать, с полностью выполненными подстановками". Так что похоже правильный ответ на вопрос - 3. Это - объявление шаблонной функции. Правда, как видите, с небольшими оговорками.
typedef int T;
template<class T1>
int Run(T1 process) {
return 1;}
#pragma warning(disable: 4430)
template Run(T process);
#pragma warning(default: 4430)
Если не секрет, а что за тест?
ОтветитьУдалитьЭто был тест на знание C++ на www.odesk.com.
ОтветитьУдалить