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

0 投票
1 回答
127 浏览

argument-dependent-lookup - 架构描述语言 (ADL) 的使用?

我正在为软件架构模块做一个项目,并且必须使用 ADL 创建我的一个“视图”。虽然我一直在对各种 ADL 进行一些研究,但我发现它们中的大多数在过去 5 年内都没有更新......他们称之为似乎已经死了。

ADL 是在行业中使用还是只是 UML?因为我觉得我被教了一些没用的东西:s

提前致谢

0 投票
4 回答
1175 浏览

c++ - 模板和参数依赖查找

在编译这个程序时,我期望 operator<< 调用解析为全局命名空间中的那个,但是编译器却报告了一个模棱两可的重载。我认为非依赖查找发生在命名空间中的函数之前,这些函数由于参数依赖查找而被包含为潜在匹配项。这似乎是非模板函数的情况。

有人可以解释吗?

编译器输出:

0 投票
2 回答
400 浏览

c++ - 为什么这个程序交换值?

我有以下代码:

程序给出输出:

该程序实际上交换了值!这是为什么?的参数swap()不是指针或引用。

(我正在使用 VS 2005)

0 投票
1 回答
1611 浏览

sharepoint-2007 - SharePoint 2007 动态筛选查找

大家早上好。我正在寻求有关在SharePoint 2007中设置库模板的帮助。以下是详细信息:

  • 我有一个包含多个子站点的父站点。

  • 我想设置一个库模板,然后可以将其放置在每个子站点上。这些库将从父站点上的一系列集中列表中提取,以提供元数据选项。这样,我只需要维护一组列表,维护的列表信息将可供每个库使用。

  • 因为这些库存在于主站点的子站点上,所以我不能使用简单的查找。常规查找列类型仅适用于当前站点中的列表。

  • 我可以访问过滤的查找列类型,这似乎是正确的选择,因为它允许我访问父站点上的集中列表。

我希望在基于此模板将文件上传到库时提示用户。选择文件后,将向用户显示要填写的元数据选项列表。

  • 我想让第一个过滤查找为用户提供一个选择列表。这目前可以正常工作。

  • 我希望第二个过滤查找提供基于第一个过滤查找中的选择的过滤选项列表。

  • 有一个 CAML 查询过滤器字符串部分,这是我挂断的地方。如何写一个字符串来引用一个字段而不是一个静态值?

这是我尝试过的。在 Apply Query Filter 字段中,我输入了:

这有效,但仅提供值为Blue(静态字符串)的结果。我正在寻找一种方法来引用Category的实际选定值。它的效果是:

我现在的挂断是我不知道正确的语法,或者这种语法是否存在。

非常感谢您的建议。我不受这种方法的束缚,所以如果有另一种方法可以实现相同的目标,我会很乐意接受它。

0 投票
1 回答
917 浏览

c++ - 具有模板函数的嵌套命名空间中的 C++ ADL

我对 C++ 中的标准 ADL 分辨率有疑问。

这是解释我的查询的示例代码:

那么,我的问题是关于 ADL 的标准是什么?应该找到参数的父命名空间中的所有函数,还是只找到参数的(嵌套)命名空间中可用的函数+全局函数?

该程序已在 MSVC 2008 上进行了测试(并且可以使用 SP 编译,但并非没有...)

0 投票
2 回答
406 浏览

c++ - 一般开始,加上 decltype 考虑本地 using-declaration

C++0x 的 ranged-for 循环对处理数组有一个特殊的例外(FDIS §6.5.4),并且有两个函数 std::begin 和 end 被重载以处理数组或选择开始/结束方法。这让我相信可以编写一个接受泛型序列的函数来匹配 ranged-for 循环的行为:

如果 C 的命名空间中有一个“更具体的”开始/结束,它将通过 ADL 选择,否则代码“默认”为 std::begin/end。

但是,ranged-for 有这个特殊例外是有原因的。如果在命名空间中传递一个类型的数组,该数组具有语义不同的 begin/end 并接受一个指针,则不会选择 std::begin/end 的数组形式:

为了避免这种情况,有没有比编写我自己的开始/结束包装器(在内部使用 ADL)并显式调用它们而不是 std::begin 或 ADLized 开始更好的解决方案?

但是,如上面的省略号所示,我什至不知道如何编写 my::begin!对于该 decltype,我如何选择将通过本地 using-declaration 和 ADL 选择的类型?

0 投票
1 回答
402 浏览

c++ - 3.4.2 从 n3290 Draft 中查找依赖于参数的名称

ISO草案n3290第3.4.2节第1段的一点:

当函数调用中的后缀表达式unqualified-id时,可能会搜索在通常的非限定查找期间未考虑的其他命名空间,并且在这些命名空间中,可能会找到以其他方式不可见的命名空间范围的友元函数声明。这些对搜索的修改取决于参数的类型(对于模板模板参数,模板参数的命名空间)。

在这里,他们谈到“对搜索的这些修改取决于参数的类型/模板模板参数/模板参数的名称空间”......任何人都可以举例说明吗?我尝试使用argumetn types..please expalin with template template argument types & namespace of the template argument type

0 投票
2 回答
280 浏览

c++ - Visual Studio 10 和 GCC 4.5 之间的哪个编译器在运算符重载和参数相关查找方面是正确的?

我有以下代码:

在 Visual Studio 10 中,上面的代码编译得很好:编译器识别出Bar可以从 实例化Foo&,因此它调用适当operator >>的 ,然后返回一个Bar实例,并Foo(const Bar &)适当地调用构造函数。

但是,GCC 4.5 不编译上述代码。它输出以下错误:

根据语言标准,为什么会发生上述情况以及哪个编译器是正确的?

编辑:

为什么 C++由于存在 ,会创建一个临时Foo对象?c = a >> bFoo(const Bar &)

0 投票
0 回答
271 浏览

c++ - 用于 C++ 中的自定义类型的 swap():使用 ADL 或模板专业化?

可能重复:
如何为我的班级提供交换功能?

类似的问题(例如如何重载 std::swap())已经被问到这里,但我仍然没有看到一个决定性的答案。

从各种来源,我知道两种推荐的(由不同的人)扩展swap()自定义类型的方法:

  • 在同一命名空间中编写一个自由函数并让ADL查找它;
  • 为您的类型专门std::swap()模板。

第一种方法看起来更优雅一些,但是它有一个问题我不知道如何克服:

在上面的代码片段my_type中有一个swap()成员,类似于 stdlib 容器;请注意,它不是免费功能的替代品,假设我只想拥有它。现在,问题出在注释行上,交换了两个fields。由于type可以是任何东西,我想使用swap()定制的type,而不是通用的变体。但是,我不能(似乎)使用 ADL,因为如果我删除std::,编译器总是选择显然不适合type. 如果我离开std::那里,任何swap()依赖 ADL 的自定义都将被绕过,而std::swap()仍然可以使用的专业化。

上面的用例不会破坏swap()算法的所有 ADL 定制吗?或者仍然可以swap()在有swap()成员的类中使用 ADL 查找?

0 投票
3 回答
233 浏览

c++ - 没有模板的 ADL

有人可以向我展示一个不使用模板的 ADL 示例吗?从来没有见过这样的事情。我的意思是这里。具体来说,我对导致某些陷阱的示例感兴趣,例如提到的。

编辑:

我认为托马拉克的答案可以扩展到陷阱。考虑一下:

在这里,我们期望调用来自未命名命名空间的 f,而是调用另一个命名空间。