OBS数组DARRAY
2024-10-11
7
0
DARRAY是一个宏,是对某个类型声明为数据。
#define DARRAY(type) \
union { \
struct darray da; \
struct { \
type *array; \
size_t num; \
size_t capacity; \
}; \
}
其内部又是一个共用体。其中 darray又是一个其成员的展开。
struct darray {
void *array;
size_t num;
size_t capacity;
};
所以这玩意展开就是这样的:
union
{
struct darray
{
void *array;
size_t num;
size_t capacity;
}da;
struct
{
type *array;
size_t num;
size_t capacity;
};
}
区别就是一个可以匿名访问,da可以按整体传递。两个array成员,一个是void指针,一个是宏指定的类型指针。
为什么不外面包一层了。真是迷惑。
struct ep_pass {
char *name;
DARRAY(struct cf_token) vertex_program; //PASS中调用VS主函数
DARRAY(struct cf_token) fragment_program;//PASS中调用PS主函数
struct gs_effect_pass *pass;
};
传递整体:
ep_makeshaderstring(ep, &shader_str,&pass_in->vertex_program.da, &used_params);
为什么不是这个,更加清晰的表示。
ep_makeshaderstring(ep, &shader_str,&pass_in->vertex_program, &used_params);