В приведенном ниже коде foo
должна быть функцией, доступной для всех, но foo_helper
не должен, поэтому я поместил ее в анонимное пространство имен. Очевидно, что я ухожу из охранников и включает в этот пример, но они есть.Как вызвать вспомогательный переменный шаблон в анонимном пространстве имен?
foo.h
:
namespace
{
void foo_helper() {}
template <typename T, typename... Tail>
void foo_helper(T head, Tail... tail)
{
bar(head);
foo_helper(tail...);
}
}
void foo();
template <typename... Args>
void foo(Args... args)
{
before();
foo_helper(args...);
after();
}
foo.cpp
:
void foo() {}
Проблема заключается в том, что для того, чтобы foo_helper
«s VARIADIC шаблон для работы, он должен иметь, что первоначальный вариант без аргументов. Но это заставляет меня определить функцию без шаблона - это заголовочный файл, который будет разбиваться после включения этого файла в несколько исходных файлов. Я не могу переместить определение foo_helper
в исходный файл, потому что он находится в анонимном пространстве имен, поскольку он не должен быть доступен.
Есть ли способ решить эту проблему?
BTW, вам нужно заменить 'foo_helper (args)' на 'foo_helper (args ...)' и 'foo_helper (tail)' с 'foo_helper (tail ...)'. – KyleKnoepfel
@KyleKnoepfel Исправлено, спасибо. – Leonhart231