那么,函数名只是指向函数指向起始地址的标签,那么我们可以用不同的名称链接一个函数吗?作为OpenGL API中的一个例子,函数以'gl'开头,我们可以把它变成'GL'吗?我有强迫症,这对我来说真的很难。
答案 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)
//...
更容易看到。