问题标签 [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++ - 声明但不定义内部结构/类 - 是否合法 C++?
以下代码是否合法 C++?
Visual C++ 和 GCC 都接受它,但是代码对我来说似乎有些奇怪,我不想让它被一些未来的编译器拒绝。
尽管如此,该模式对我来说似乎对减少编译时间依赖性很有用——我经常使用它来声明用于传递一些“上下文”(一堆变量)的结构,这些“上下文”(一堆变量)在几个函数之间共享,这些函数都驻留在同一个 cpp 中文件,这样我就不必将“上下文”定义引入公共接口。
python - 是否可以在 Python 中前向声明函数?
是否可以在 Python 中前向声明函数?我想cmp
在声明之前使用我自己的函数对列表进行排序。
我已经组织了我的代码,以便cmp_configs
在调用之后放置方法的定义。它失败并出现此错误:
有没有办法cmp_configs
在使用之前“声明”方法?它会让我的代码看起来更干净吗?
我假设有些人会很想告诉我我应该重新组织我的代码,这样我就不会遇到这个问题。但是,在某些情况下,这可能是不可避免的,例如在实现某些形式的递归时。如果你不喜欢这个例子,假设我有一个确实需要转发声明一个函数的情况。
考虑这种情况,在 Python 中需要前向声明一个函数:
之前定义的位置end_condition
和位置。end_result
是重新组织代码并始终将定义放在调用之前的唯一解决方案吗?
c++ - Nested class forward declaration for template inheritance
What's the proper way to inherit from a template class with the template argument being a nested class within the inheriting class?
c++ - 带有前向声明的默认模板参数
是否可以在不指定或不知道这些参数的情况下转发声明使用默认参数的类?
例如,我想boost::ptr_list< TYPE >
在 Traits 类中声明 a 而无需将整个 Boost 库拖到包含该特征的每个文件中。我想声明
namespace boost { template<class T> class ptr_list< T >; }
,但这不起作用,因为它与真正的类声明不完全匹配:
我的选择是只能忍受它还是boost::ptr_list< TYPE, boost::heap_clone_allocator, std::allocator<void*>
在我的特征类中指定?(如果我使用后者,我想我还必须转发 declareboost::heap_clone_allocator
和 include <memory>
。)
我浏览了 Stroustrup 的书 SO,以及互联网的其他内容,但没有找到解决方案。通常人们担心不包含 STL,解决方案是“只包含 STL 头”。但是,Boost 是一个更庞大且编译器密集型的库,因此除非绝对必须,否则我宁愿将其省略。
c++ - 两个类可以使用 C++ 互相看到吗?
所以我有一个 A 类,我想在其中调用一些 B 类函数。所以我包括“bh”。但是,在 B 类中,我想调用 A 类函数。如果我包含“啊”,它会以无限循环结束,对吗?我能做些什么呢?
c++ - 类的前向声明似乎在 C++ 中不起作用
以下代码在 VC++6 中编译。我不明白为什么我收到C2079: 'b' uses undefined class 'B'
以下代码的编译错误。
B类源
B 类标头
结构 A 标头
如果我将 B 类标头更改为以下内容,则不会出现错误。但标题声明不会在顶部!
带有奇怪的标头声明的 B 类标头
c++ - 前向声明和 typeid
我想根据子类的类型检查超类A
的类型B
(在超类中使用方法A
,以便B
继承它)。
这就是我认为的诀窍(即使用前向声明):
但是,此代码无法编译。我得到的错误是:
我该如何解决这个问题?
c++ - 转发声明使用 enable_if 的函数:模糊调用
我在声明一个使用的函数时遇到了一些麻烦boost::enable_if
:以下代码给了我一个编译器错误:
编译时,我收到“对 foo 的模糊调用”错误。根据 的定义enable_if
,'type' typedef 对应于void
条件为真时,所以据我所知,foo
匹配的两个签名。为什么编译器认为它们不同,是否有正确的转发声明方法foo
(最好不重复该enable_if
部分)?
javascript - Javascript中的模棱两可的函数声明
我是 Javascript 新手,对函数声明的工作方式感到困惑。我对此进行了一些测试并得到了一些有趣的结果:
前向声明有效并弹出“说”
在对面
没用,虽然它也声明了一个函数对象
如果我们声明该函数并在之后重新声明它:
我得到的是“说”而不是“说”。那是惊喜!
好的。似乎只有最新的函数声明有效。然后让我们先声明函数对象,然后是“常规”函数:
另一个惊喜,是“speak”之后是“speak”。“常规”函数声明根本不起作用!
对所有这些都有解释吗?而且,如果“常规”函数声明真的那么“脆弱”并且可以很容易地被同名的函数对象覆盖,我应该远离它吗?
另一个问题是:只有函数对象格式,这种前向声明是不可能的吗?有没有办法在Javascript中“模拟”它?
c++ - C++ 前向类声明生成器
是否有一种工具可以遍历文件列表并吐出带有前向声明的头文件它遇到的类?理想情况下,我想将它集成到 Visual C++ 的构建过程中。