迭代并写入宏变量?

时间:2019-02-23 10:00:08

标签: c++ macros

我正在尝试在OpenGL代码中添加一些语法糖。 我从

开始
    GLint mapView, mapProjection, f1;
    ...
    mapView = glGetUniformLocation( program, "mapView" );
    mapProjection = glGetUniformLocation( program, "mapProjection" );
    f1 = glGetUniformLocation( program, "f1" );

将其转换为宏很容易

    #define BindUniform(name) name = glGetUniformLocation( program, #name )
    ...
    BindUniform( mapView );
    BindUniform( mapProjection );
    BindUniform( f1 );

现在我要转换为可变参数宏

    #define BindUniforms(...) ? foreach(x) x = glGetUniformLocation( program, #x) ?
    ...
    BindUniforms( mapView, mapProjection, f1 );

能否达到足够的优雅?我希望有2-3行的解决方案。我看到了一个30行以上的大型宏集解决方案,该解决方案基于递归,但看起来有些过头了。还要注意,宏正在写入自变量,这与我尝试过的一些只能从中读取的示例不同。

编辑。在发布此问题之前,我做了一些搜索。这个问题Is it possible to iterate over arguments in variadic macros?有一些解决方案,但是它们要么代码太多,要么不写参数。 因此,我的问题背后的想法是如何使用尽可能的代码来实现它。

0 个答案:

没有答案