gpt4 book ai didi

c - 变量类型本身就是变量的语言?

转载 作者:太空宇宙 更新时间:2023-11-04 02:35:03 24 4
gpt4 key购买 nike

我将使用 C 作为示例语言来说明我的意思。

struct parent
{
int x;
char y;
};
struct child
{
char y;
int x;
};

int foo(void * s, type obj_type)
{
// the casting is done using a "type" variable
obj_type obj = (obj_type) s;
return obj->x;
}

int main(int argc, char** argv)
{
type obj_type = struct parent *;
struct parent p;
p.x = 0;

//returns 0
foo(&p, obj_type);

obj_type = struct child *;
struct child c;
c.x = 5;

// returns 5
foo(&c, obj_type);

return 0;
}

如您所见,x 被放置在两个结构的内存中的不同位置,因此我不能只在内存中有一个静态偏移量。无论如何,这在 C 中是否可行(一些我想不到的预处理器魔法)?我假设没有,但是是否有任何语言可以将类型本身用作变量?我很想探索以类型为中心的编程的含义

编辑:正如 itsme86 所指出的,C# 具有 Type 类的这种能力。 C++ 概念和 Haskell 类型类也很有趣。

最佳答案

如果您不考虑类型安全,您可以使用 offsetof(来自 stddef.h):

int foo(unsigned char * s, size_t offset)
{
int* ptr = (int*)(s + offset);
return *ptr;
}

foo((unsigned char*)&p, offsetof(struct parent, x));

但我不会真的推荐它。

关于c - 变量类型本身就是变量的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38727687/

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