私が意味することを示すために、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#は型クラスでこの能力を持っている:私はタイプを中心としたプログラミング
EDITの意味を探るのが大好きです。また、C++のコンセプトやHaskell Typeクラスも興味深い。
私は何をお使いの提示従わないと思います。 'return obj-> x;' int'を返すのですか? –
はい。しかし、型演算子にもよりますが、obj-> xはobjのアドレスにあるかもしれませんし、1バイト離れたオフセットでも構いません。私が欲しいのは、値ではなくタイプを識別するための変数です – m1cky22
あなたが探している機能は[型式イントロスペクション]です(https://en.wikipedia.org/wiki/Type_introspection)。いくつかのオブジェクト指向言語では利用できますが、C言語では使用できません(ただし、すべての構造体の最初のメンバーとして 'type'メンバーを追加することでハックすることができます)。 – user3386109