gpt4 book ai didi

C++ (gcc) 预处理器宏 : Automatic function generation - OpenGL Shader "Swizzle" Syntax

转载 作者:行者123 更新时间:2023-12-04 03:24:45 29 4
gpt4 key购买 nike

让我开始回答这个问题,我不知道我的目标是否可行,如果可行,我不知道如何找到信息。
OpenGL 着色语言允许使用称为 swizzeling 的语法。
如果有一个 vector

v {x, y, z}
可以通过做构造一个新的 vector
v.xxx, v.xxy, v.xxz, v.xyx, ... etc
总共有 3 * 3 * 3 = 27 个可能的选项。
我想在我自己的 vector 库中实现这种功能。
以下是此类函数的一个示例:
vec3<T> xxx() const
{
vec3<T> v(x, x, x);
return v;
}
然后我可以编写另外 26 个函数来说明所有可能的选项,但这似乎是我应该能够使用宏来做的事情。例如,像
vec3<T> (#A)(#B)(#C)() const
{
vec3<T> v(#A, #B, #C);
return v;
}
其中#A、#B 和#C 是编译器扩展的 3 个单个字符,可能的选项为 x , yz .
gcc/g++ 可以实现这样的事情吗?

最佳答案

#define SWIZZLE(a,b,c)\
vec3<T> a##b##c() const\
{\
vec3<T> v(a, b, c);\
return v;\
}

SWIZZLE(x,x,y)
SWIZZLE(x,x,y)
SWIZZLE(x,x,z)
...
有关 ## 的更多信息运算符,搜索“ token 粘贴”。

关于C++ (gcc) 预处理器宏 : Automatic function generation - OpenGL Shader "Swizzle" Syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67790091/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com