gpt4 book ai didi

c++ - 导出命名空间之后的所有内容都没有导出吗?

转载 作者:IT老高 更新时间:2023-10-28 22:22:20 24 4
gpt4 key购买 nike

我正在阅读有关模块的内容,我希望做这样的事情:

a.cpp

module foo.a;

export namespace foo {
struct A {
void doA();
};
}

import foo.b;
void foo::A::doA() {
B{}.doB();
}

b.cpp

module foo.b;

export namespace foo {
struct B {
void doB();
void start();
};
}

import foo.a;
import std.io;
void foo::B::doB() {
std::cout << "Stuff done!" << std::endl;
}

void foo::B::start() {
A{}.doA();
}

main.cpp

import foo.b;

int main() {
foo::B{}.start();
}

由于模块接口(interface)不能相互使用,为了使其工作,导出的命名空间之后的所有内容都不能是接口(interface)的一部分。根据当前的TS,以上是否正确?对于实现中的循环依赖,是否需要拆分成另一个文件?

最佳答案

来自 Working Draft, Extensions to C++ forModules (见 Experimental C++ Features),第 13 页,§10.7.2:3:

A module M1 has an interface dependency on a module M2 if the module interface of M1 contains a module-import-declaration nominating M2. A module shall not have a transitive interface dependency on itself.

例子:

// Interface unit of M1
export module M1;
import M2;
export struct A { };

// Interface unit of M2
export module M2;
import M3;

// Interface unit of M3
export module M3;
import M1; // error: cyclic interface dependency M3 -> M1 -> M2 -> M3

Q:“实现中的循环依赖,是否需要拆分成另一个文件?”

答:是的。


Q:“根据目前的TS,以上是否正确?”

答:没有。

在你的代码中,你有一个错误,因为 foo.afoo.b 形成了一个循环接口(interface)依赖

关于c++ - 导出命名空间之后的所有内容都没有导出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469921/

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