在下面的代码中,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
到源文件,因为它位于匿名命名空间中,因为它不应该是可访问的。
有没有办法解决这个问题?