我正在尝试编写一个库,其中包含一些模板化函数,其中一些是辅助函数,因此我不希望我的用户访问它们。一些基本代码可能是
//mylib.h
namespace myfuncs
{
template<class T>
void helper (T input, int extrainformation)
{
//do some usefull things
}
template<class T>
void dostuff(T input)
{
int someinfo=4;
helper(input, someinfo);
}
}
是否可以通过某种方式隐藏辅助函数,使库的用户无法直接调用它?我原以为未命名的命名空间可能会完成这项工作,但因为我使用的是模板,所以我无法在头文件和实现文件之间拆分函数声明和函数体。将未命名的命名空间放在头文件中是没有用的,也是不好的风格。我唯一能想到的就是创建一个 mylib
类并将函数封装为私有(private)/公共(public)静态函数。
任何更好的解决方案将不胜感激。
菲尔
最佳答案
一种方法是使用“详细信息”或“内部”命名空间。有多少图书馆这样做。
namespace myfuncs
{
namespace detail
{
template<class T>
void helper (T input, int extrainformation)
{
//do some usefull things
}
}
template<class T>
void dostuff(T input)
{
int someinfo=4;
detail::helper(input, someinfo);
}
}
关于c++ - 隐藏模板化辅助函数 - 静态成员或未命名的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8167618/