函数别名,适用于头文件
Function alias which is fine for header file
假设文件是这样的:
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;
这可以毫无问题地包含在多个翻译单元中。
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 如何在 C++ 中创建一个适用于 Windwos 和 Linux 的文件夹(目录)
- 如何在 c++ 中从".in"格式的文件中获取输入?此代码进入无限循环,但适用于".txt"文件格式
- 在哪里可以下载适用于 Windows 的 GCC 4.3.2 二进制文件
- 适用于iOS和Android的C ++复制文件
- 是否有适用于 sigma.js兼容 json 文件的专用格式
- 无法在 OSX 上运行编译的 C++ 可执行文件,适用于 Debian
- 编译VNC服务器二进制文件(适用于Android)
- 是否有适用于Windows的iTunes C++库允许访问USB连接的iOS设备的文件系统?
- 在c++(适用于Arduino)中可以编译在数据中生成一个图形文件
- 如何在新程序中包含来自其他c++文件的函数(适用于Mac OSX应用程序)
- .h文件中的全局常量,将问题与gcc联系起来,适用于g++
- 移动文件夹Windows c++:适用于Vista及以上版本,不包括XP
- 如何配置替代Eclipse运行配置-适用于LLVM BitCode.bc文件
- target_compile_options()仅适用于C++文件
- C++:如何将%USERPROFILE%路径转换为文件路径(应该适用于Windows XP及更高版本)