我试图通过C宏实现类型泛型向量操作。如果初始化和声明在同一行上发生,那么我当前的实现是有效的,因为宏可以知道向量的类型:
vec2_t(char) char_vector = vec2(10, 20); // unexpanded
struct {char x, char y;} char_vector = {10, 20}; // expanded
然而,问题在于,如果我尝试重新分配向量,它就不再知道类型,因此它不会编译:
char_vector = vec2(20, 30); // unexpanded
char_vector = {20, 30}; // expanded
将其扩展为char_vector = (struct {char x, char y;}) {20, 30};
可以解决问题,但这需要在每次重新分配向量时指定类型。其他向量操作也会出现同样的问题,例如添加等等。
有没有办法实现这一点而无需在每次重新分配时指定类型?我意识到typeof
可以在Linux上运行,但我正在寻找一种独立于平台的解决方案。