问题标签 [dependent-name]
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++ - 我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?
typename
在模板中,我必须在哪里以及为什么必须放置template
依赖名称?
究竟什么是从属名称?
我有以下代码:
我遇到的问题是typedef Tail::inUnion<U> dummy
在线。我相当肯定这inUnion
是一个从属名称,VC++ 对此感到窒息是完全正确的。
我也知道我应该能够添加template
某个地方来告诉编译器 inUnion 是一个模板 ID。但具体在哪里?然后它应该假设 inUnion 是一个类模板,即inUnion<U>
命名一个类型而不是一个函数吗?
c++ - 从依赖基类访问类型
有谁知道为什么 using-declarations 似乎不适用于从依赖基类导入类型名称?它们适用于成员变量和函数,但至少在 GCC 4.3 中,它们似乎被类型忽略了。
我有一个带有一组分配器样式 typedef 的基类,我想在多个继承级别中继承它们。到目前为止我发现的最佳解决方案是上面的第 3 版,但我很好奇为什么第 4 版似乎不起作用。GCC 接受 using 声明,但似乎忽略了它。
我检查了 C++ 标准,C++ Prog。朗。第三版。[Stroustrup] 和 C++ 模板 [Vandevoorde, Josuttis],但似乎都没有解决 using-declarations 是否可以应用于依赖的基类类型。
如果查看另一个示例会有所帮助,请在 GCC 邮件列表上提出相同的问题,但没有真正回答。提问者表示他在其他地方看到过“使用 typename”,但 GCC 似乎不支持它。我没有其他符合标准的编译器可用于测试它。
c++ - Visual C++ 编译器允许从属名称作为没有“类型名称”的类型?
今天我的一个朋友告诉我,下面的代码在他的 Visual Studio 2008 上编译得很好:
我通常使用 g++,它总是拒绝通过第二个 PrintAll() 调用。据我所知,对于这个问题,g++ 正在以标准方式翻译模板。
那么,是我的知识错了,还是VS2008的扩展?
c++ - 使用整数作为模板参数时出现编译器错误
以下代码有什么问题?
在函数内部B::bar
,编译器抱怨:
错误:''和'int'类型的无效操作数到二进制'operator<'</p>
如果 A 不是模板,则一切都可以正常编译。
c++ - C++中非模板类的专门成员函数
我正在尝试使用模板化参数专门化非模板类的模板成员函数:
我收到一个错误“非法使用显式模板参数”。使此有效的正确语法是什么?
更新:
也许我过度简化了这个问题。我真正想做的是专门处理这种涉及依赖名称的情况,我认为这可能是在这里投入活动的原因。我最初的想法是像这样重载函数:
但是特殊的 Foo 没有被调用。我怎样才能做到这一点?
c++ - 多个嵌套的依赖名称 - 在哪里粘贴 typename 关键字?
这个问题的灵感来自另一个问题。在试图回答这个问题时,我明白我自己有很多问题。所以......考虑以下几点:
这可以使用 MSVC9.0 和 Online Comeau 成功编译。但是,困扰我的是我不明白typename
(1)中指的是什么以及为什么我们不需要typename
(2)中的内容。
我已经尝试了这两种我认为应该在 MSVC 上失败的语法(语法?):
和
当然,一种解决方法是typedef
像这样使用连续的 s:
抛开好的风格,我们在语法上是否必须使用我提到的解决方法?
其余的只是一个有趣的例子。无需阅读。与问题无关。
请注意,虽然 MSVC 接受原始的奇怪语法而没有多个typename
s(我的意思是 (1) 和 (2)),但它会导致上述问题中的奇怪行为。我想我也会在这里以简洁的形式展示这个例子:
这不编译。我提到的解决方法解决了这个问题,但我确信这里的问题是我最初的问题 - 缺少类型名,但你真的不知道在哪里贴一个。首先十分感谢。
c++ - 调用模板基类的模板函数
这是代码:
并且,运行时:
我收到以下错误:
我知道non-dependent names 和 2-phase look-ups。但是,当函数本身是模板函数(foo<>()
我的代码中的函数)时,我尝试了所有变通方法但都失败了。
c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?
根据此页面: http ://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,加上名称模板本身和在其中声明的名称(成员、朋友和局部变量)”
这似乎得到了以下代码被认为是有效的事实的支持(LLVM/Comeau)
花一些时间阅读 C++ 98 标准后,我找不到指定此行为的位置。我希望在“temp.nondep”下找到提及这一点。
c++ - C++ 模板的两阶段名称查找 - 为什么?
为什么 C++ 标准定义了模板的两阶段查找?难道非依赖声明和定义的查找也不能推迟到实例化阶段吗?
c++ - 模板基类 typedef 成员不可见
我知道默认情况下编译器看不到“依赖名称”这一事实。但是在其他 SO 问题的回答中(here、here以及最终在 C++ 常见问题解答中) ,有人告诉我using
声明可能会有所帮助。
所以我尝试了。
模板基类:
还有一个派生类,使用基类的成员:
我在 ideone 上试过了。它有 gcc-4.3.3 和 gcc-4.5.1
这是预期的行为吗?我们应该如何解决访问父模板类成员类型定义的“依赖名称”法则?