- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很久以前,我一定在某个地方见过 GLSL vector ,现在我们有一个涉及 OpenGL 的大学项目(他们实际上说的是 2.4,而不是 3.x 或 4.x)。然而,它们似乎与 glsl 密切相关,我希望在原始 C 中拥有相同的东西: struct
s 与 x
/r
、y
/g
、b
也可能是 z
。我尝试为每个 vec2
、vec3
、vec4
进行一个定义,内部使用 int (因为 OpenGL 确实有使用 int 的函数,而不是 long int ,我是说我自己的定点可能更快或更简单),与他们的 unsigned
对应(因为老师说最好使用正值来提高可读性,可读性和更好的直觉)发生了什么,同时使用翻译进行居中,而我更喜欢以算术方式更改坐标,以便可以在编译时进行调整)。这会占用很多空间,因此我使用宏来定义它,所以最后我还将包含一个无宏示例版本,这样您就可以知道这对您来说是否难以理解。
主要问题是我无法将这些结构传递给以数组/指针作为参数的函数(因此我确实将 union 成员定义为 .ptr
以进行更简单的转换),也不能我显然在它们上使用了数组下标。我想我记得在某处看到过一种用数组定义 struct
或 union 的方法,其中 struct
或 union
可以是直接下标来访问该数组,但我找不到它了……也许它是一些 GNU 扩展,但我不确定。
尽管如果没有办法,并且我仍然想要可读性,我仍然可以选择仅使用基本数组定义我的类型,然后 union dim { x, y, z }
并访问例如 my_vec[x]
。但我想知道是否也可以使用相同类型的 my_vec.x
。代码如下:
typedef unsigned int uint;
#define VEC_TYPEDEF(type, type_name, n) \
typedef union type_name ## vec ## n ## _t \
{ \
struct \
{ \
type x; \
type y; \
VEC_THIRD(type, z) \
VEC_FORTH(type, w) \
}; \
struct \
{ \
type s; \
type t; \
VEC_THIRD(type, p) \
VEC_FORTH(type, q) \
}; \
struct \
{ \
type r; \
type g; \
VEC_THIRD(type, b) \
VEC_FORTH(type, a) \
}; \
type ptr[n]; \
} type_name ## vec ## n
#define VEC_THIRD(type, var) type var;
#define VEC_FORTH(type, var) type var;
VEC_TYPEDEF(int,, 4);
VEC_TYPEDEF(uint, u, 4);
#undef VEC_FORTH
#define VEC_FORTH(type, var)
VEC_TYPEDEF(int,, 3);
VEC_TYPEDEF(uint, u, 3);
#undef VEC_THIRD
#define VEC_THIRD(type, var)
VEC_TYPEDEF(int,, 2);
VEC_TYPEDEF(uint, u, 2);
它给出的一个例子:
typedef union uvec3_t
{
struct
{
unsigned int x;
unsigned int y;
unsigned int z;
};
struct
{
unsigned int s;
unsigned int t;
unsigned int p;
};
struct
{
unsigned int r;
unsigned int g;
unsigned int b;
};
unsigned int ptr[3];
} uvec3;
目前,如果尝试使用类似 my_vect.x = my_other_vect[0];
(使用 uvec3 my_vect, my_other_vect;
),gcc 只会发出“错误:下标值既不是数组也不是指针也不是 vector ”:/
最佳答案
为此,您首先需要对结构进行打包,以便没有填充然后你可以像这样使用它
* (<TYPE> *) ((void *)my_other_vect + sizeof(<TYPE>)*offset);
例如对于 int 类型并获取 x 你可以这样做
my_vect.x = * (int *) ((void *)my_other_vect + sizeof(int)*0);
my_vect.y = * (int *) ((void *)my_other_vect + sizeof(int)*1);
关于c - ty如何像数组一样定义可通过下标访问的结构体 union ?就像在 GLSL 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574384/
是否可以创建一个可以使用显式参数标签调用的下标? struct MyType { subscript (label: Bool) -> String? { return nil
我正在尝试制作一个包含带有上标和/或下标的文本的超链接。我找到了两种方法来做到这一点,它们都很糟糕。 解决方案#1:使用 Typography.Variants .这为某些字体提供了极好的上标……。
在这里! 我想在 geom_bracket 中包含一个带下标的标签在 ggplot2 .我尝试了不同的方式,但没有人成功(评论中的尝试): library(ggplot2) ggplot(data =
我正在尝试让 graphviz 启动并工作,我迫切需要节点标签中的下标。不幸的是,通过浏览无数关于类似问题的帖子,我似乎适合所有建议的解决方案,但仍然不起作用。这是我的代码: digraph G{
抱歉格式问题,我从来没有真正在这样的论坛上发帖,所以我必须学习一下操作方法。 我的问题是:我正在编写一个模板类,我想通过多种 [] 运算符访问我的容器。我读了一些关于这个主题的内容,所以我已经能够重载
我知道我们可以像在 matplotlib 中生成单个下标 $r_i$ 会给我一个下标为“i”的r。 但我想生成一个包含 3 或 4 个字母的下标,例如 r_ijk 应该给我一个带有“ijk”作为下标的
this[5] 有什么作用?我是否调用了某种未定义的行为?关于: std::vector foo{this, this + 5u}; 这个有用吗?我想知道指针算法对 this 的影响是什么。这是一个测
我从 visual studio 得到了一些奇怪的行为,关于以下代码片段,错误列表显示了 E0349 的几个实例:没有运算符“[]”匹配这些操作数。 Intellisense 似乎暗示类型不匹配,但正
我想为我的数组类提供 PHP 样式的 push_back 功能: arrayT arr; arr[] = 10; // == std::vector::push_back() 和 arrayT::op
下标 (subscripts)可以定义在类(class)、结构体(structure)和枚举(enumeration)中,是访问集合(collection),列表(list)或序列(sequence)
我正在使用traindata训练svm。 (R中的e1071软件包)。以下是有关我的数据的信息。 > str(train) 'data.frame': 891 obs. of 10 variab
#include int main(){ int arr[7] = {0,1,2,3,4,3,2}; arr[0]++[arr]++[arr]++[arr]++[arr]++[arr]
如果我想以特定用户的身份调用主脚本文件中的另一个 shell 脚本,我该怎么做呢?子脚本似乎失去了它正在运行的用户的上下文,我还没有找到任何有用的子脚本技术。 例如:war-install.sh if
这个问题在这里已经有了答案: Why isn't there an operator[] for a std::list? (4 个答案) 关闭 5 年前。 我有这些类型定义: typedef pa
我在 NSUserdefaults 中获取字典的字符串时遇到问题,这是我的代码。我不知道似乎是什么问题: static func getItemInUserDefaultsDictionary(key
我正在尝试执行以下代码并收到错误 Could not find member 'subscript on Xcode6 var b:[[Float]] = [[1,2]] var i2 = 0 //
我尝试运行的代码: std::string genBlankName(std::vector &posts) { std::string baseName = "New Post ";
1 1 A_{3} 2 2 C_{2} 3 3 ^{5}C_{1} 我有一个这样的输入文件要绘制。第三列是该点上的标签( latex 格式)。我如何在绘图上显示这些标签,就像它们在 latex 编译后
我在这里搜索了一段时间,之前的问题/答案部分回答了我的问题。我正在学习 R,来自 Matlab。正如标题所说,我有一个关于情节注释的问题。在 Matlab 中,绘制包含各种数据格式的注释非常简单,我正
我想将一些化学数据放入表格的列中。但在现有表格中,下标显示为普通字符。其中一些显示为问号。我应该怎么做才能解决它? 当我输入这段代码时 SELECT N'H' + NCHAR(0x2082) + N
我是一名优秀的程序员,十分优秀!