У меня есть шаблонная функция, которая вызывает другую функцию и сохраняет его возвращаемое значение, а затем выполняет некоторую работу, прежде чем вернуть значение. Я хотел бы расширить это, чтобы обрабатывать t = void < /code>, и мне было интересно, является ли специализация моей единственной опцией. < /P>
Код: Выделить всё
template
T Foo( T(*Func)() )
{
// do something first (e.g. some setup)
T result = Func();
// do something after (e.g. some tear down)
return result;
}
// Is this specialization the only option?
template
void Foo( void(*Func)() )
{
// do something first (e.g. some setup)
Func();
// do something after (e.g. some tear down)
return;
}
void Bar() {}
int BarInt() { return 1; }
int main()
{
Foo(&BarInt);
Foo(&Bar);
}
Или регулярная версия Foo быть изменена для обработки типа void и в основном ничего не делать в этом случае? Я думал, что, возможно, мой локальный результат может быть завершен в тип, который мог бы обрабатывать void , может быть, но также может рассматривать задание как нарушитель сделки.
Подробнее здесь:
https://stackoverflow.com/questions/142 ... n-template