在下面的代碼中,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
的可變參數模板的工作,它需要有一個不帶參數的初始版本。但是,這迫使我定義一個非模板函數是一個頭文件,在將這個文件包含在多個源文件中後,這個頭文件會被破壞。我無法將foo_helper
的定義移動到源文件中,因爲它位於匿名名稱空間中,因爲它不應該是可訪問的。
有沒有辦法解決這個問題?
順便說一句,你需要用'foo_helper(args)'和'foo_helper(tail)'用'foo_helper(tail ...)'替換'foo_helper(args)'。 – KyleKnoepfel
@KyleKnoepfel修好了,謝謝。 – Leonhart231