Если у меня есть:Как отключить шаблон, если параметр шаблона не указан?
template< typename T >
foo(T bar)
{
// do stuff.
}
Как я могу отключить шаблон от использования, если кто-то пишет
int bar;
foo(bar)?
Позвольте мне объяснить немного дальше:
template< typename T, typename Y > inline void
destroy(T &t, Y &y)
{
}
template< typename T, typename Y > inline void
destroy(T &t, Y &&y)
{
}
template< typename T > inline void
destroy(T &t, unsigned long int &y)
{
}
Если я печатаю
destroy< unsigned long int >(something, 10)
Это вызывает
template< typename T, typename Y > inline void
destroy(T &t, Y &&y)
Что вы имеете в виду «отключить»? Как не использовать синтаксис угловой скобки? Это тип-вычет и работает отлично. Компилятор будет интерпретировать 'foo (100)' то же, что и 'foo (100)'. –
Вы хотите заставить людей явно сказать foo (bar) вместо того, чтобы подразумевать этот параметр? –
falstro
@WilliamCustode Следует отметить, что это верно только для * функций *, если foo является конструктором для шаблона класса foo', то ваш SOL. –
IdeaHat