可以链接具有不同名称的函数

时间:2016-07-20 18:06:15

标签: c++ c c++11

那么,函数名只是指向函数指向起始地址的标签,那么我们可以用不同的名称链接一个函数吗?作为OpenGL API中的一个例子,函数以'gl'开头,我们可以把它变成'GL'吗?我有强迫症,这对我来说真的很难。

4 个答案:

答案 0 :(得分:7)

鉴于这是C ++ 11,您可以使用auto关键字轻松地为您喜欢的任何函数创建别名:

const auto Finish = glFinish;
int main()
{
    Finish();
}

使用const通知编译器没有其他任何内容可以修改您已设置的函数指针/别名,并且可以实现更好的代码生成。

没有一种内置的,自动化的方式来重命名"但是,功能。除了手动维护列表之外,获得类似结果的一种方法是找到一个包含每个OpenGL调用并执行正则表达式搜索的页面,并将模式(gl(.+))替换为const auto \2 = \1;,或者某事那样的。

答案 1 :(得分:2)

您可以使用您想要的任何名称创建函数指针,并将现有函数分配给它们:

char *(*my_strcpy)(char *, const char *) = strcpy;

如果您的编译器支持__VA_ARGS__

,您也可以按如下方式使用预处理器
#define my_function(...) gl_function(__VA_ARGS__)

后者可能更容易使用,因为您不必知道返回类型或参数的数量和类型。

虽然您可以将上面的宏定义为非函数类型,但将其定义为函数类型宏将有助于防止它在您不想要的地方被替换。

答案 2 :(得分:2)

您可以使用#define重命名所有功能(但如果您打算与其他任何人分享您的代码,我建议这样做)。例如

#define GLClear      glClear
#define GLDrawArrays glDrawArrays
#define GLFinish     glFinish

答案 3 :(得分:0)

我找到了更好的解决方案:

#define GLFunction(Function) gl##Function

所以:

#define GLClearDepth GLFunction(ClearDepth)
//...

更容易看到。