私はテンプレート関数を持っています、例えば、
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);
}
パブリック インターフェイスは、ベクトル参照のみを受け取るインターフェイスです。クライアントコードができないように、もう1つの実装を非表示にしたいと思います
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を使用しています。なぜそれがディレクティブを使用してコンパイルされ、修飾名ではコンパイルされないのか、そして私が望むものを達成するためのより良い方法があるかどうかを誰かが説明できますか?