小编Ped*_*rda的帖子

二进制文件I/O.

如何用D语言读写二进制文件?在C中将是:


    FILE *fp = fopen("/home/peu/Desktop/bla.bin", "wb");
    char x[4] = "RIFF";

    fwrite(x, sizeof(char), 4, fp);
Run Code Online (Sandbox Code Playgroud)

我在D docs找到了rawWrite ,但我不知道用法,也不知道我的想法.fread来自C:

T [] rawRead(T)(T [] buffer);

如果文件未打开,则抛出异常.否则,为文件句柄调用fread并抛出错误.

rawRead始终在Windows上以二进制模式读取.

io d

9
推荐指数
1
解决办法
1299
查看次数

在D函数中接收...数组的数组?

不知道是否是可能的,我想收到也许data[n]还是data[n][n][n].在C可以(如果错误,纠正我):


void save_data(void* arr, int n, int dimensions)
{
    // do ugly things
}
Run Code Online (Sandbox Code Playgroud)

但必须在D中存在一种更优雅的方式.

arrays d

8
推荐指数
1
解决办法
219
查看次数

一个专用D模板中的多个类型

说我要处理ushortuint一些方法,但string不同的.所以我猜我需要一个专门的模板string和其他两个ushortuint.是吗?


// for most
void func(T)(T var) { ... }

// for uint and ushort
void func(T: uint, ushort)(T var) { ... }

Run Code Online (Sandbox Code Playgroud)

这是想法,虽然代码无法编译.它有效还是非常糟糕?

templates d specialization

5
推荐指数
2
解决办法
200
查看次数

将D模板结构作为常见类型处理

我在设计D应用程序时遇到了麻烦.也许我的方法完全错了,所以我来这里救你.任何建议,包括完全重写,都是受欢迎的.

我有一些模板类型:

enum Type : byte { Message='!', Integer='@' }

struct Token (T) {
    Type type;
    T value;
}

alias Token!string MessageToken;
alias Token!long   IntegerToken;
Run Code Online (Sandbox Code Playgroud)

我需要一般地处理这些类型:

AnyToken genToken(bool cond) {
  if (cond)
     return MessageToken(Type.Message, "nighly builds");
  else
      return IntegerToken(Type.Integer, -42);
}

AnyToken a = genToken(true);
AnyToken b = genToken(false);
Run Code Online (Sandbox Code Playgroud)

我该如何达到这个效果?编辑:欢迎OOP替代品.

templates d

5
推荐指数
1
解决办法
175
查看次数

检查类型是否是模板的实例化

我有结构


struct RGBA (T) {/* ... */}
struct BMPFile (DataT) if (is(DataT == RGBA)) {/* ... */}
Run Code Online (Sandbox Code Playgroud)

但是is(DataT == RGBA)因为DataT是一个类型而RGBA是一个模板,所以无法工作.相反,我需要检查,如果一个类型是一个模板的实例化以声明file


BMPFile!(RGBA!ushort) file;
Run Code Online (Sandbox Code Playgroud)

@FeepingCreature在评论中表示


    struct RGBA(T) {
        alias void isRGBAStruct;
    }
    struct BMPFile (DataT) if (is(DataT.isRGBAStruct)) {}
Run Code Online (Sandbox Code Playgroud)

虽然工作我没有提示alias void isRGBAStruct,这似乎是一个黑客.希望std.traits将涵盖这一点.

templates d constraints

4
推荐指数
1
解决办法
199
查看次数

在D中在运行时声明类成员

我想将以下结构作为类成员,但我不知道它的类型T,所以我需要在运行时"声明"结构.


struct Chunk (T) {
    string id;
    T[][] data;
}

class FileBla {
    this() {
        Chunk !int ck; // need to be turned in a class member
    }
}
Run Code Online (Sandbox Code Playgroud)

应该遗漏一些容易的东西.

templates struct d class

2
推荐指数
1
解决办法
153
查看次数

标签 统计

d ×6

templates ×4

arrays ×1

class ×1

constraints ×1

io ×1

specialization ×1

struct ×1