Я хочу, чтобы создать экземплярМогу ли я использовать decltype (или что-то подобное) для явного создания экземпляра шаблона без дублирования подписи?
template<typename T> void foo(
T& t,
SomeType some_parameter,
AnotherType another_parameter,
EtcType yet_another_parameter,
AsYouCanTell this_is_a_very_long_signature);
то есть, функция с длинной подписью. Теперь я знаю, как это сделать:
template void foo<int>(
int& t,
SomeType some_parameter,
AnotherType another_parameter,
EtcType yet_another_parameter,
AsYouCanTell this_is_a_very_long_signature);
Но я должен дублировать подпись. Кроме того, что, если требуется конкретное создание экземпляра для 5 разных типов - я его копирую 5 раз? Не имеет смысла ...
Я думал, может быть, я мог бы написать
template decltype(foo<int>);
, но по какой-то причине это не работает. Зачем?
Он не пытается ничего делать. Он пытается явно создать экземпляр этого шаблона. – Puppy
Вам не нужны имена параметров функции, кстати: 'template foo (int &, SomeType, AnotherType, EtcType, AsYouCanTell);'. Вы также можете сократить имена типов с помощью псевдонимов типов. –
dyp
Интересно, можете ли вы использовать шаблоны переменных C++ 14 для этого: вместо явного создания экземпляра шаблона функции может быть достаточно явного создания шаблона переменной, ссылающегося на шаблон функции. Возможно, аналогичная вещь может быть достигнута с помощью статических элементов данных и шаблонов псевдонимов, но я не уверен в этом. – dyp