问题标签 [forward-declaration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从具有非虚拟析构函数的容器继承
我正在尝试使用前向声明和 d 指针来消除一些包含依赖项。一切都运行良好,除了我在许多地方使用 XList typedef 来提高可读性(例如:)typedef QList<X> XList
。
typedef 前向声明问题的解决方法是使用继承:class XList : public QList<X>{};
. QList 有一个非虚拟析构函数。考虑到 Qt 自己的 QStringList 继承QList<QString>
并且我没有在堆上分配 XLists 的事实,您认为这种解决方法有什么问题吗?我应该明确禁止 XList 类的堆分配吗?
c++ - 如何转发将 C++ 类声明为从另一个类继承?
我知道我可以转发声明一个类,如下所示:
但是,我可以这样做:
?
谢谢!
c++ - 在 C++ 中,是否可以将一个类声明为从另一个类继承?
我知道我可以做到:
但我可以转发声明一个类继承自另一个类,例如:
一个示例用例是协变引用返回类型。
...然后在另一个不包含某处的标题中
编译器处理声明所需的唯一信息是作为公共RB* B:Foo()
基类的信息。现在很明显,如果您打算对. 但是,如果某些客户端从不调用,则它们没有理由包含可能会显着加快编译速度的某处。RB
RA
Foo
Foo
c++ - 以下前向声明的多继承指针转换代码如何工作?
在下面的代码中,指针转换和多继承如何一起发挥作用?
我的理解有点不稳定。
一方面, someWork 对 Bar 一无所知,所以这应该行不通;但另一方面,我已经提前声明了 Bar。
谢谢!
c++ - 两个类和内联函数
我有两个类,它们都使用其他类,例如:
当我像上面的例子一样定义它时,它可以工作(我也有一些#ifndef
可以避免无限的标题重复)。但我也想在我的类中添加一些内联函数。我在这里读到我应该将内联函数的定义放在头文件中,因为如果我将它们放在 cpp 文件中并想从其他 cpp 文件中调用它们,它将不起作用(当我这样做时,我在链接)。但这里的问题是这样的:
我收到错误:无效使用不完整类型“struct Class2”。
那么我该怎么做呢?
c++ - 嵌套枚举的前向声明
我有类似于以下的代码:
我想在 B 类中声明一个 EMyEnum 类型的成员(在 A 之前声明)。这可能吗?我意识到解决方案是第二个声明 B 类,但为了清楚起见,我不希望这样做。
c++ - 在前向声明中“使用 typedef-name ... 作为类”
我在这里做一些基于策略的设计,我需要 typedef 很多模板类型来缩短名称。
现在问题来了,当我需要使用指向其中一种类型的指针时,我尝试只前向声明它,但编译器抱怨test.cpp:8: error: using typedef-name ‘Test1’ after ‘class’
它与大小无关,因为我根本不需要 obj,它只是“.h”文件中的一个指针,我不想将整个模板放入其中。
这是 g++:
有什么提示吗?
c++ - 对象构造/转发函数声明歧义
Observation: the codes pasted below were tested only with GCC 4.4.1, and I'm only interested in them working with GCC.
你好,
我不只是几次偶然发现一个我不理解的对象构造语句,直到今天我才注意到它引入了哪些歧义。我将解释如何重现它,并想知道是否有办法修复它(允许 C++0x)。就这样吧。
假设有一个类的构造函数只接受一个参数,而这个参数的类型是另一个具有默认构造函数的类。例如:
如果我尝试Class
在堆栈上构造一个类型的对象,我会感到模棱两可:
我说这是一个对象构造,但编译器坚持认为它是函数体内的前向声明。对于仍然不明白的你,这里有一个完整的例子:
So well, enough examples. Anyone can help me get around this without making anything too anti-idiomatic (I'm a library developer, and people like idiomatic libraries)?
-- edit
Never mind. This is a dupe of Most vexing parse: why doesn't A a(()); work?.
Thanks, sbi.
c++ - 重构 C++ 代码以使用前向声明
我有一个庞大的代码库已经存在了一段时间,我正试图通过重构它来整理它。我想做的一件事是找到我可以转发声明成员的所有头文件,而不是包括整个头文件。
这是一个相当劳动密集型的过程,我正在寻找一种工具来帮助我确定哪些标头具有可以向前声明的成员。
是否有编译器设置可以发出警告或建议以下代码可以使用前向声明?我正在使用以下编译器 icc、gcc、sun studio 和 HP 的 aCC
有没有可以做同样工作的独立工具?
c++ - 在命名空间中前向声明全局类型
我想使用第 3 方库而不使用其头文件。我的代码位于它自己的命名空间中,因此我不能使用常规的前向声明,因为我不想污染全局命名空间。目前我有这样的事情:
是否可以以驻留在命名空间中的方式转发声明全局类型?简单的 typedef 不起作用。