私は OpenGL の作業に Derelict を使用していcast(GLvoid*) Vec3.sizeof
ますが、glVertexAttribPointer のような関数を常に使用しなければならないことにうんざりしています。関数を作ろうと思ったので、glsizeof
import std.stdio;
alias void GLvoid;
struct Vec3 {
float x, y, z;
}
GLvoid* glsizeof(T)(T t) {
return cast(GLvoid*) t.sizeof;
}
void main() {
Vec3 vec = { x: 2.5, y: 4.8, z: 3.2 };
writeln(cast(GLvoid*) vec.sizeof); // prints 'C'
writeln(cast(GLvoid*) Vec3.sizeof); // prints 'C'
writeln(cast(GLvoid*) int.sizeof); // prints '4'
// Now to try using glsizeof :)
GLvoid* size_vec = vec.glsizeof; // call glsizeof using a uniform function call
GLvoid* size_vec3 = Vec3.glsizeof;
GLvoid* size_int = int.glsizeof;
writeln(size_vec); // should print 'C'
writeln(size_vec3); // should print 'C'
writeln(size_int); // should print '4'
}
次のエラーが表示されます。
test.d(25): Error: no property 'glsizeof' for type 'Vec3'
test.d(26): Error: no property 'glsizeof' for type 'int'
型にプロパティを追加する方法はありますか? または、たとえばエイリアスを使用して、これを別の方法で行うことはできますか? それとも私がやろうとしていることは不可能ですか?
これがDPasteのコードです。
編集:予想される出力に詳細を追加しました。