gpt4 book ai didi

d - D 编程语言中的 Pimpl-idiom

转载 作者:行者123 更新时间:2023-12-04 23:52:36 24 4
gpt4 key购买 nike

D 有一个很棒的模块系统,与 C++ 相比,它大大减少了编译时间。根据文档 D 仍然提供不透明的结构和联合以启用 pimpl 习惯用法。我的问题是:如何在一个模块中声明嵌套结构(或联合)并在另一个模块中定义它?它的语法是什么?

在 C++ 中,标题看起来像这样

struct S { 
...
struct Impl;
Impl * p;
};

并且实现文件(cpp-file)会使用一些有趣的 :: - 像这样的语法:
#include "header.h"
struct S::Impl {
...
};

我如何在 D 中实现相同的功能?

最佳答案

D(至少是 DMD)使用 .di声明文件。它们在某种程度上等同于 C .h文件,但它们是可选的。 D编译器可以生成.di自动文件(当指定 -H 开关时),尽管我相信目前它所做的只是剥离函数体和单元测试。

这是使用 .di 实现 PImpl 的一种方法文件:

  • mod.di :
    struct S
    {
    struct I;
    I* pi;
    }
  • mod.d :
    struct S
    {
    struct I
    {
    int v;
    }

    I* pi;
    }

  • 请注意,您目前有责任确保 S 中的字段在 .d 中是相同的和 .di文件 - 如果它们不同,编译的模块将对字段的布局方式有不同的了解,这可能导致内存损坏。当前的编译器实现不验证 .d 中的定义是否匹配。和 .di文件。

    关于d - D 编程语言中的 Pimpl-idiom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20469768/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com