首页 > 解决方案 > 如何在 API 中创建私有函数?

问题描述

我的 API 目前有以下头文件:

// my_library.h
namespace MyLibrary
{
    // Private functions
    long bar(long id);
    unsigned long foo(long id);

    // Public functions
    void do_public_thing(long id);
}

此头文件具有文件中每个函数的实现my_library.cpp。我的问题是我想创建barfoo私有函数,但仍然在单独的.cpp文件中实现它们,所以我不能使用空白命名空间(至少我不这么认为)。我应该怎么办?

标签: c++api

解决方案


我看不出有什么理由应该在执行 API 的公共部分的标头中公开命名空间 API 私有函数。

你可能想要的是

// my_library.h
namespace MyLibrary {
    // Public functions
    void do_public_thing(long id);
}

// my_library.cpp
#include library.h

namespace {
    // Private functions
    long bar(long id) {
        // Implementation
    }
    unsigned long foo(long id) {
        // Implementation
    }
}

void MyLibrary::do_public_thing(long id) {
    // Implementation
    long bar_result = bar(id);
    unsingned long foo_result = foo(id);
}

匿名命名空间将保护您免受链接器歧义的影响,以防万一bar()foo()在任何其他翻译单元中实现。


推荐阅读