问题标签 [using-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++ 概念 lite 和类型别名声明
是否可以按照概念 TS 的建议在概念内使用typedef
或using
声明类型别名?如果我尝试类似以下 MWE,则代码无法编译(使用 gcc 6.2.1 和-fconcepts
开关)
结果错误:
c++ - Q_ENUMS 和 using 声明不能一起工作
考虑以下类定义:
以及以下main
文件:
通过这样做,我可以轻松访问 QML 中枚举的命名常量。
举个例子:
只要枚举的声明包含在类中,这就会起作用。
例如,如果我如下所示更改类定义,它就不再起作用了:
现在,Exported.BAR
在 QML 文件中是undefined
.
最基本的问题是:为什么它不适用于using 声明?
请注意,它适用于转发声明,例如:
这对实际的文档Q_ENUM
是正确的(强调我的):
该宏向元对象系统注册一个枚举类型。它必须放在具有 Q_OBJECT 或 Q_GADGET 宏的类中的枚举声明之后。
在整个部分中没有提及定义。
另一方面,我们从标准中得到了这个:
using-declaration 将一组声明引入到 using-declaration 出现的声明性区域中。
所以,我期待它也能正常工作。无论如何,这可能是我的错误期望。
也就是说,关于如何处理这种不便的任何建议?如果枚举
是在类之外定义的
,我可以看到解决它的唯一方法是在类中定义另一个枚举并在它们之间进行一对一的映射。
它远非可维护而且确实有点乏味。
c++ - 如何在模板声明中删除重复的模板参数
为简洁起见,我只想在其显式实例化中将模板参数命名一次,但出现编译器错误。我正在尝试使用 cppreference 中描述的 C++ 语法Type alias, alias template
。这是我的示例代码:
这里有什么问题?
c++11 - 使用 forward_as_tuple 在遗留函数签名上传递参数包
在我的应用程序中,我想通过旧函数签名传递参数包,并更改值。这是用我的尝试作为评论来说明我的问题的代码:
有没有办法使参数包成为可声明的左值?
c++ - 继承显式构造函数(英特尔 C++)
当使用 using继承基类的构造函数时,英特尔 C++ 编译器(版本 16.0.3.207 Build 20160415)似乎放弃了显式说明符。这是一个错误吗?
c++ - 是否可以在 C++ 中“捆绑”模板参数?
有没有办法将模板参数“捆绑”在一起以避免重复?
我有几个类和函数都使用相同的三个模板参数。拥有一个使用每个类/函数一次的函数并不罕见。生成的代码很快就会变得非常混乱。有没有更简洁的方法来编写这段代码?
请注意,这个函数几乎有一半是 string 的重复<VertexID, EdgeMembershipType, SetBitmap>>
,但是这个 string 的每次使用都适用于不同的类或函数,所以我不认为 alias 会起作用。
(如果有帮助,这个函数的目的是创建一个指向函数的指针数组,这些函数将创建对象的子类型MetricContext<VertexID, EdgeMembershipType, SetBitmap>>
c++ - 用私有基函数覆盖公共虚函数?
让我们考虑两个类A
并B
具有以下接口:
然后是从两者继承的第三个类,A
公开是因为它实现了这个“接口”,而B
私下是因为那是实现细节。
但是,在这个特定的实现中,start()
只需要包含对B::start()
. 所以我想我可以使用快捷方式并执行以下操作:
并完成它,但显然它不起作用。所以我得到using
私有基本功能无法覆盖虚拟。由此,有两个问题:
- 有什么方法可以使这项工作像我认为的那样有效吗?
- 为什么编译器会接受此代码为有效的?正如我所看到的,现在有两个
start()
函数具有完全相同的签名,C
但编译器似乎很好,只调用A::start()
.
编辑:一些精度:
- 目标是通过指针操作
C
对象。A
- 我目前正在使用一个只调用的简单函数
B::start()
,我特别想知道 using 声明是否确实可以“覆盖”虚拟,如果不能,如何允许这两个函数共存。 - 为了简单起见,我可能省略了一些东西,比如
virtual
继承。
c++ - [namespace.memdef]/1 的新措辞
我相信[namespace.memdef]/1的新措辞试图解释两个声明using M::g;
和void g();
in namespace之间的冲突X
,但我无法理解这个新措辞与所暗示的冲突之间的关系。
命名空间中的声明
N
(不包括嵌套范围中的声明),其声明符 id是非限定 id ([dcl.meaning]),其类头名称(Clause [class]) 或枚举头名称 ([dcl .enum]) 是一个标识符,或者其详细类型说明符 的形式为class-key attribute-specifier-seq opt identifier ([dcl.type.elab]),或者是一个opaque-enum-declaration,声明(或重新声明)其unqualified-id或标识符为N
. [ 注意:模板的显式实例化 ([temp.explicit]) 或显式特化 ([temp.expl.spec]) 不会引入名称,因此可以使用封闭命名空间成员中的非限定 ID来声明设置,如果主模板是在内联命名空间中声明的。— 尾注] [ 示例:—结束示例]
即使当我查看可能导致本段更改的DR 1838时,我在理解以下句子时也存在一些问题(重点是我的):
标准不清楚当一个实体被声明但未在内部命名空间中定义并通过 外部命名空间中的using-declaration 声明时会发生什么,并且具有该名称的实体的定义作为unqualified-id出现在外部命名空间中命名空间。这是内部命名空间实体的合法定义,就像定义使用了限定 ID一样,还是定义是外部命名空间的成员,因此与using-declaration冲突?在处理此类定义方面存在实施分歧。
这句话后面的例子与段落中的例子完全相同[namespace.memdef]/1
。我突出显示了上面的单词定义X::g()
,因为在提到的示例中没有函数的定义。我错过了什么?
c++ - 在 using-declaration 中,依赖名称可以在模板替换后呈现给构造函数吗?
在这个例子中:
T::X
是一个从属名称,指的是 中的成员X
。T
如果S<T>
用 实例化T = X
:
使用声明会变成继承构造函数吗?
Clang 拒绝代码DEMO,而 g++ 接受它。
请注意,如果我们写:
两个编译器都接受代码并将其视为继承构造函数。是否using T::X
允许按标准成为继承构造函数?
c++ - 具有模板别名的策略类
我不确定问题标题是否正确。
我正在寻找一种方法来根据策略类的模板别名选择 A 类的模板特化之一。有没有办法做到这一点?