问题标签 [argument-dependent-lookup]
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++ - 重载左移运算符
我研究并发现,当您想为 cout 重载输出流运算符时,正确的方法是这样做:
这个函数必须在类之外定义,因为这里发生的事情是 operator<< 实际上是在 ostream 中定义的友元函数,而您正在使用它。但是,问题是,这个函数是如何在 ostream 中定义的?由于这个函数有 2 个参数,而第二个参数是用户定义的,所以他们无法猜测那里会发生什么。
特定类的重载应如下所示:
编译器/库如何对第二个参数进行泛型定义,特别是因为 C++ 中没有泛型类(例如 Java 中的 Object)?
c++ - 命名空间、类成员 ADL 冲突
有没有办法限定打印功能,以便打印基本成员和派生成员?我可以将两个友元函数移动到它们最近的封闭命名空间:
这有效,结果如下:
outside::A 42
outside::A 42
inside::A 24
可以通过朋友功能实现相同的功能吗?也许使用using
?
编辑:inside::A::print(std::ostream&)
击败下面的静态演员建议,https ://stackoverflow.com/a/22585103/710408 。还有其他选择吗?
c++ - VC++ 2012:“使用参数相关查找找到”解决方法?
可能有人问过,但我对如何使这段代码与 VC 2012 一起工作很感兴趣:
我必须使用这个 ns 命名空间,并且不能更改它。它必须能够在没有 STL 的情况下工作,并且有自己的 swap()。但是,如何正确地将它与 STL 一起使用?
c++ - 顶级命名空间中类的参数依赖查找?
由于历史原因,我有一个位于顶级命名空间中的类。我需要为它定义一个必须使用参数相关查找找到1的函数。顶级名称空间是否被视为此类的关联名称空间,还是我必须采取一些解决方法?
1否则使用它的模板可能找不到它,因为在模板之后定义的符号只有在 ADL 找到时才能看到。
c++ - 构造函数初始化列表中的 ADL
如何在构造函数初始化列表中启用 ADL?例如,假设我有一个bignum
具有命名空间级函数的abs
函数。现在我想写一个类Foo
,用传递给构造函数的实例的绝对值初始化它的成员;abs
如果存在,它应该使用命名空间级别,std::abs
否则:
无论如何,在类范围内都禁止使用声明,我不想“污染”命名空间。如何启用 ADL 以便它在构造函数初始化列表中工作?
c++ - 什么时候应用 ADL?
有3个例子:
我。
二、
三、
我不清楚 ADL 查找的实际条件是什么?我需要参考标准来描述它。
c++ - 在全局范围内重载标准容器上的运算符是不好的风格吗?
我遇到了这个问题:
问题(如here所述)是因为隐藏而a += b;
无法编译;而 ADL 没有找到,因为 ADL 只在这种情况下搜索。Bar::operator+=(Qux&, Qux const &)
::operator+=
::operator+
namespace std;
这很棘手,因为问题仅在包含时才会出现B.h
- 但B.h
显然与Buffer
. 代码不应该根据我是否包含另一个标题而中断。
(实际上我只是在更改编译器时才发现这一点,我使用的以前的编译器确实名称查找错误并接受了代码)。
我的问题是:A.h
由于这个问题,过载只是一个坏主意吗?
我现在通过在里面B.h
做来解决这个问题,但这似乎很hacky,有更好的选择吗?using ::operator+=;
namespace Bar
c++ - 编译器无法通过 ADL 找到基类方法
这是怎么回事——为什么不能编译?
(MinGW 和 VC11 中的错误与No conversion from double to std::string
.)
如果我在 中更改打印函数的名称Derived
,它会成功编译,所以很明显Derived::print(string const &)
是以某种方式屏蔽Base::print(double)
。但我的印象是函数签名包括参数类型,所以这个掩码应该发生在这里。在基类方法的情况下这不正确吗?
c++ - 如何调用与成员函数同名的内联友元函数?
如此处所述,模板实例化类成员函数上的 C++11 样式 SFINAE 和函数可见性使自由函数黯然失色。使用完全限定的名称通常有效,但是我很难使用其他类的内联声明的友元函数。考虑以下示例:
我想我明白问题是什么,如此处所述内联友元函数的范围是什么?内联友元函数通常使用 ADL 找到,并且在封闭的命名空间中并不真正可见。
所以我的问题是我应该如何更改我的代码以使其正常工作(除了重命名 f 之一)?