我將使用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類型類也很有用。
我不認爲我遵循你的要求。你想'返回obj-> x;'返回'int'? –
是的。儘管取決於類型運算符,obj-> x可能位於obj的地址處,或者可能是1個字節的偏移量(給定結構設置)。我想要的是一個可用於識別類型而非值的變量 – m1cky22
您正在尋找的功能是[類型自省](https://en.wikipedia.org/wiki/Type_introspection)。它在一些面向對象的語言中可用,但在C中不可用(儘管可以通過將「類型」成員添加爲所有結構的第一個成員來破解它)。 – user3386109