gpt4 book ai didi

C++20 Module 多层继承

转载 作者:行者123 更新时间:2023-12-03 06:54:27 36 4
gpt4 key购买 nike

我发现在Visual Studio 2019 v16.8中,调用多层继承的类找不到它的深层基类,除非显式导入相关模块。intrfce.ixx文件:

export module intrfce;

export class Interface {
public:
virtual void Fun() = 0;
};
imp_a.ixx文件:
export module imp_a;

import intrfce;

export class ImpA : public Interface {
public:
void Fun() override {}
};
imp_b.ixx文件:
export module imp_b;

import imp_a;

export class ImpB : public ImpA {
public:
void Fun() override {}
};
构建这些文件时,IDE 显示 imp_b.ixx 中存在错误。 :

imp_b.ixx(5,33): error C2230: could not find module 'intrfce'


如果我导入 intrfce明确在 imp_b.ixx ,它会成功。
export module imp_b;

import intrfce;
import imp_a;

export class ImpB : public ImpA {
public:
void Fun() override {}
};
但是,一个类需要显式导入其所有深层基类是没有意义的。
是 bug 还是 C++20 的新标准规则?
谢谢

最佳答案

7. When a module-import-declaration imports a translation unit T, it also imports all translation units imported by exported module-import-declarations in T; such translation units are said to be exported by T.


强调 导出 由我添加。
所以,我认为意图是 imp_a.ixx应该
export module imp_a;

export import intrfce; // re-export this transitive dependency

export class ImpA : public Interface {
public:
void Fun() override {}
};
同一模块的不同单元之间的导入行为不同。

关于C++20 Module 多层继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64352651/

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