我有模板函数,比如说,
template<class T>
void mysort(std::vector<T>& vec)
{
size_t b, m, e,
...
mysort(vec, b, m, e);
}
template<class T>
void mysort(std::vector<T>& vec, size_t b, size_t m, size_t e)
{
size_t x, y, z;
...
mysort (vec, x, y, z);
}
公共接口是一个只接受矢量引用的接口。我想隐藏另一个,实现,这样没有客户端代码可以做
mysort(vec, a, b, c);
创建一个类,把实现函数设为private static,感觉不太对劲,我尝试使用匿名命名空间,
namespace abc
{
namespace
{
template<class T>
void mysort(std::vector<T>& vec, size_t b, size_t m, size_t e)..
}
template<class T>
void mysort(std::vector<T>& vec)...
}
它有帮助,但不完全是淘汰赛......
#include "mysort.h"
int main()
{
...
abc::mysort(vec, a, b, c); // this won't compile, good
}
但是,如果我将其更改为:
#include "mysort.h"
using namespace abc;
int main()
{
...
mysort(vec, a, b, c); // it compiles and runs!!
}
我在 x86_64 上使用 gcc Ubuntu 4.4.3-4ubuntu5。谁能解释为什么它使用 using 指令编译,而不是使用限定名称,以及是否有更好的方法来实现我想要的?