c++ - 适用于头文件的函数别名

标签 c++ alias linkage

假设文件是​​这样的:

my_code.h:

namespace my {
    namespace _details{
        int ActionNoPrecision(int a);
        float ActionSinglePrecision(float a);
        double ActionDoublePrecision(double a);
    }

    auto& Action = my::_details::ActionSinglePrecision;
}

my_code.cpp - 实现这些功能

所以 Action 是函数的别名,意思是从用户代码调用。在我这边,我想控制这个别名的含义,而不触及用户的源代码(即用户仍然调用 Action,但 Action = ActionDoublePrecision)。但是在当前代码中我不能包含这个头文件,因为函数引用将被定义多次。

如何处理?我想出了创建内部带有这些别名的静态类的想法,但我从未在任何库中看到过这种方法(那么它们是否只有一个硬编码的函数名称?)。

我还有一个更深层次的问题。如果别名的含义发生变化(即函数别名、类型别名和其他),别名是否需要重新编译用户代码?我想不是,因为真正被调用的函数的位置改变了,所以重新链接是必要的

最佳答案

你快到了。只需使用这个:

constexpr auto* Action = my::_details::ActionSinglePrecision;

这可以毫无问题地包含到多个翻译单元中。

关于c++ - 适用于头文件的函数别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54371073/

相关文章:

c++ - C++中内部链接的实际应用

c++ - 声明 const 全局变量时是否需要静态?

c++ - 链接失败,怎么回事?

c++ - boost::filesystem3::detail::dir_itr_imp 在 boost::shared_ptr 解引用中的含义

c++ - 插入元素后 vector 的容量增加?

CMake:如何为安装不同的目标创建别名?

C++语法在类中为非类重载函数起别名

c++ - 在 c 中对宏 SQR 求平方感到困惑

c++ - 简单情况下的 Gcovr 分支覆盖率

c++ - 为函数创建别名