适用于头文件的函数别名
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)。但是使用当前代码我不能包含这个头文件,因为函数引用将被定义多次。
如何处理?我想出了创建带有这些别名的静态 class 的想法,但我从未在任何库中看到过这种方法(所以它们只有一个硬编码函数名称吗?)。
还有一个更深层次的问题。如果别名的含义发生变化(即函数别名、类型别名和其他),别名是否需要重新编译用户代码?我想不是,因为真正被调用的函数的位置改变了,所以需要重新链接
你快到了。只需使用这个:
constexpr auto* Action = my::_details::ActionSinglePrecision;
这可以毫无问题地包含到多个翻译单元中。
假设文件是这样的:
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)。但是使用当前代码我不能包含这个头文件,因为函数引用将被定义多次。
如何处理?我想出了创建带有这些别名的静态 class 的想法,但我从未在任何库中看到过这种方法(所以它们只有一个硬编码函数名称吗?)。
还有一个更深层次的问题。如果别名的含义发生变化(即函数别名、类型别名和其他),别名是否需要重新编译用户代码?我想不是,因为真正被调用的函数的位置改变了,所以需要重新链接
你快到了。只需使用这个:
constexpr auto* Action = my::_details::ActionSinglePrecision;
这可以毫无问题地包含到多个翻译单元中。