c++ - 隐藏模板化辅助函数 - 静态成员或未命名的命名空间

标签 c++ templates namespaces

我正在尝试编写一个库,其中包含一些模板化函数,其中一些是辅助函数,因此我不希望我的用户访问它们。一些基本代码可能是

//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/

相关文章:

c++ - 基类中的私有(private)成员和公共(public)成员有什么区别?

c++ - Qt3D 默认统一和属性

c++ - 将 vector 作为值分配给 std::unordered_map 中的键

c++ - 模板特化和普通的旧功能

c++ - 在不知道函数参数的情况下使用 lambda 创建 std::function

c# - 带有命名空间但没有 xmlns 的 XML

c++ - #includes 在命名空间中,到 "embed"命名空间中的预写内容

frameworks - 依赖项应该在命名空间树中向上还是向下走?

c++ - 将函数作为参数传递给模板返回值

java - map 中的动态模板依赖