我正在使用「廢棄」處理我的OpenGL工作,並且我厭倦了爲glclrtexAttribPointer等funclions創建cast(GLvoid*) Vec3.sizeof
。所以我想我會成爲一個功能,glsizeof
將用戶定義的屬性添加到D中的所有類型中
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'
有沒有辦法將屬性添加到類型?或者我可以以其他方式做到這一點,例如使用別名?或者我試圖做不可能的事情?
這是012aste的the code DPaste。
編輯:添加了一些關於我的預期輸出的更多細節。
乾杯!我更新了我的用例(我應該把'GLvoid *'而不是'GLsizei'),但答案保持不變。替代品不是太糟糕 - 感謝包括他們。 :) – bjz 2012-07-18 06:49:35
好的。我更新了我的答案,但實際上我有點震驚,那是一個指針,更不用說'void *'了。並且將一個大小轉換爲指針對我來說似乎是_really_,但我對您使用的API一無所知。 – 2012-07-18 06:57:32
作爲一個C API的OpenGL有很多奇怪的函數參數,並傳播到廢棄綁定。這就是爲什麼我想把它從大部分代碼中抽象出來的原因。 – bjz 2012-07-18 07:17:58