d避免原始指针
原文
 如果你是C++程序员,考虑共针/独针,
 如果想让代码更通用,可考虑通用的空*(void*)类型.但有更好方法.看看:
import core.stdc.stdlib;
void* myInt = malloc(int.sizeof);
*(cast(int*)myInt) = 500;
writeln(*(cast(int*)myInt));
free(myInt);
在C语言中它很常见,但可更好.可让转换保存大小信息,可用构,但也可用D的切片特性:
import core.stdc.stdlib;
void[] myInt = malloc(int.sizeof)[0..int.sizeof);
现在,通过myInt.length保存了在int上分配字节的信息.即赋值数据到指定位置时,都要绑定检查它.
 强烈推荐不要使用malloc,它使代码更难读,不安全,不可跟踪,而且更长.
 这样:
void[] myInt = new void[int.sizeof];
效果相同,不必导入,少写,可用(-profile=gc)跟踪代码.
 现在,如果为了通用数据,且不需要堆分配,要理解union和std.variant(标签联).如果知道数据流,就不必用标签联,直接用联.现在,只需要:
cast(Something*)(voidPointerData)
这是各种音频API的通用音频缓冲池示例:
union HipAudioBuffer
{
    version(OpenAL)
    {
        import openal;
        ALuint al;
    }
    version(OpenSLES)
    {
        import opensles.slinterface;
        SLIBuffer* sli;
    }
    version(XAudio2)
    {
        import directx.xaudio2;
        XAUDIO2_BUFFER* xaudio;
    }
}
然后,可直接按属性来访问"cast",而不是从void*转换数据.
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号