问题标签 [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.

0 投票
8 回答
216934 浏览

c++ - 我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

typename在模板中,我必须在哪里以及为什么必须放置template依赖名称?
究竟什么是从属名称?

我有以下代码:

我遇到的问题是typedef Tail::inUnion<U> dummy在线。我相当肯定这inUnion是一个从属名称,VC++ 对此感到窒息是完全正确的。
我也知道我应该能够添加template某个地方来告诉编译器 inUnion 是一个模板 ID。但具体在哪里?然后它应该假设 inUnion 是一个类模板,即inUnion<U>命名一个类型而不是一个函数吗?

0 投票
2 回答
3571 浏览

c++ - 从依赖基类访问类型

有谁知道为什么 using-declarations 似乎不适用于从依赖基类导入类型名称?它们适用于成员变量和函数,但至少在 GCC 4.3 中,它们似乎被类型忽略了。

我有一个带有一组分配器样式 typedef 的基类,我想在多个继承级别中继承它们。到目前为止我发现的最佳解决方案是上面的第 3 版,但我很好奇为什么第 4 版似乎不起作用。GCC 接受 using 声明,但似乎忽略了它。

我检查了 C++ 标准,C++ Prog。朗。第三版。[Stroustrup] 和 C++ 模板 [Vandevoorde, Josuttis],但似乎都没有解决 using-declarations 是否可以应用于依赖的基类类型。

如果查看另一个示例会有所帮助,请在 GCC 邮件列表上提出相同的问题,但没有真正回答。提问者表示他在其他地方看到过“使用 typename”,但 GCC 似乎不支持它。我没有其他符合标准的编译器可用于测试它。

0 投票
2 回答
446 浏览

c++ - Visual C++ 编译器允许从属名称作为没有“类型名称”的类型?

今天我的一个朋友告诉我,下面的代码在他的 Visual Studio 2008 上编译得很好:

我通常使用 g++,它总是拒绝通过第二个 PrintAll() 调用。据我所知,对于这个问题,g++ 正在以标准方式翻译模板。

那么,是我的知识错了,还是VS2008的扩展?

0 投票
1 回答
767 浏览

c++ - 使用整数作为模板参数时出现编译器错误

以下代码有什么问题?

在函数内部B::bar,编译器抱怨:

错误:''和'int'类型的无效操作数到二进制'operator<'</p>

如果 A 不是模板,则一切都可以正常编译。

0 投票
2 回答
3041 浏览

c++ - C++中非模板类的专门成员函数

我正在尝试使用模板化参数专门化非模板类的模板成员函数:

我收到一个错误“非法使用显式模板参数”。使此有效的正确语法是什么?


更新

也许我过度简化了这个问题。我真正想做的是专门处理这种涉及依赖名称的情况,我认为这可能是在这里投入活动的原因。我最初的想法是像这样重载函数:

但是特殊的 Foo 没有被调用。我怎样才能做到这一点?

0 投票
5 回答
3598 浏览

c++ - 多个嵌套的依赖名称 - 在哪里粘贴 typename 关键字?

这个问题的灵感来自另一个问题。在试图回答这个问题时,我明白我自己有很多问题。所以......考虑以下几点:

这可以使用 MSVC9.0 和 Online Comeau 成功编译。但是,困扰我的是我不明白typename(1)中指的是什么以及为什么我们不需要typename(2)中的内容。

我已经尝试了这两种我认为应该在 MSVC 上失败的语法(语法?):

当然,一种解决方法是typedef像这样使用连续的 s:

抛开好的风格,我们在语法上是否必须使用我提到的解决方法?

其余的只是一个有趣的例子。无需阅读。与问题无关。

请注意,虽然 MSVC 接受原始的奇怪语法而没有多个typenames(我的意思是 (1) 和 (2)),但它会导致上述问题中的奇怪行为。我想我也会在这里以简洁的形式展示这个例子:

这不编译。我提到的解决方法解决了这个问题,但我确信这里的问题是我最初的问题 - 缺少类型名,但你真的不知道在哪里贴一个。首先十分感谢。

0 投票
2 回答
23592 浏览

c++ - 调用模板基类的模板函数

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

这是代码:

并且,运行时:

我收到以下错误:

我知道non-dependent names 和 2-phase look-ups。但是,当函数本身是模板函数(foo<>()我的代码中的函数)时,我尝试了所有变通方法但都失败了。

0 投票
1 回答
212 浏览

c++ - C++ 98 标准在哪里指定本地声明的模板名称不依赖?

根据此页面: http ://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,加上名称模板本身和在其中声明的名称(成员、朋友和局部变量)”

这似乎得到了以下代码被认为是有效的事实的支持(LLVM/Comeau)

花一些时间阅读 C++ 98 标准后,我找不到指定此行为的位置。我希望在“temp.nondep”下找到提及这一点。

0 投票
2 回答
5786 浏览

c++ - C++ 模板的两阶段名称查找 - 为什么?

为什么 C++ 标准定义了模板的两阶段查找?难道非依赖声明和定义的查找也不能推迟到实例化阶段吗?

0 投票
1 回答
3397 浏览

c++ - 模板基类 typedef 成员不可见

我知道默认情况下编译器看不到“依赖名称”这一事实。但是在其他 SO 问题的回答中(herehere以及最终在 C++ 常见问题解答中) ,有人告诉我using声明可能会有所帮助。

所以我尝试了。

模板基类:

还有一个派生类,使用基类的成员:

在 ideone 上试过了。它有 gcc-4.3.3 和 gcc-4.5.1

这是预期的行为吗?我们应该如何解决访问父模板类成员类型定义的“依赖名称”法则?