Dan*_*son 3 c++ templates inlining c-preprocessor
如果我有一个函数A()
,我有兴趣找到一个方便的方法来创建一个功能B()
完全相同的函数A()
,仅在名称上有所不同.新功能将是一次性使用.目的是在一个有点原始的抽样分析器中区分对相同函数的调用,并且复制函数仅在此上下文中使用.也就是说,它永远不会触及生产代码,只能用于修补.
首先猜测是一个宏,它声明一个名为的函数,B
并A()
在其内部创建一个内联调用.这里的问题是我不知道GCC中强制任意函数调用内联的方法; 似乎所有内联选项都是函数声明而不是调用.
使用模板可能有一些深奥的方法,或者可能通过欺骗编译器进行内联.我不确定这是可能的.有什么想法吗?不幸的是,新的C++标准不可用,如果它会有所作为.
使用模板
template<int x>
void A()
{
// ..
}
int main()
{
A<0>();
A<1>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更新
编译器可能太聪明,只为A <0>和A <1>创建一个主体.至少Visual C++ 2010在发布模式下完成它.要防止它,只需在日志或断言中使用函数模板体内的模板参数.例如,
#include <iostream>
template<int x>
void A()
{
::std::cout << x << std::endl;
// ..
}
int main()
{
A<0>();
A<1>();
auto v0 = A<0>;
auto v1 = A<1>;
::std::cout << v0 << std::endl;
::std::cout << v1 << std::endl;
::std::cout << (v0 == v1) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1015 次 |
最近记录: |