问题标签 [template-argument-deduction]

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 回答
940 浏览

c++ - 模板推论:为什么它适用于继承(当它转换失败时)?

我试图理解我观察到的 C++ 语言行为(我理解了它的前半部分)。

我的设置:2 个模板类:AC. A可以转换为C但不能反过来。它们有一些共同的行为,所以我正在寻找仅使用C并依赖于转换A来实现一些逻辑C来使A行为与C.
示例使用运算符重载,但我认为讨论与函数或方法相同。

我首先尝试的是使用转换构造函数:

这实际上是我在搜索SO和网络后认为我理解的前半部分。根据我收集的信息,模板参数必须完全匹配,然后才能尝试转换,在这种情况下,如果不考虑可能的转换就无法推断,因此无法推断。C如果操作员成为非模板朋友(但我不喜欢它),则可以避免这种情况。

我尝试的下一件事是使用继承:

为此我在网上没有找到解释(也许我不知道如何搜索)。

我的问题是为什么可以推断模板何时A可转换为,C因为是C(第二种情况)的基类,但不能推断出何时A可转换为C(第一种情况)?


编辑

正如我尝试过的评论中 KerrekSB 所建议的那样:

我的第一个案例(转换,而不是继承)

在这种情况下:

我认为使用他的答案c1 < a1是可行的,因为第二个参数不是演绎过程的一部分,因此第二个参数考虑了隐式转换。

我也试过:

这甚至不适用于c1 < c2. 我认为这是因为现在推演过程中不涉及任何参数。

我对吗?

0 投票
1 回答
98 浏览

c++ - 为什么 gcc 不能为我的函数模板推断出正确的类型?

vs2013:好的!

0 投票
3 回答
773 浏览

c++ - C++11、静态方法中派生类的类型推导

最小的例子:

工厂方法的make存在使我不必在实例化模板化派生类时提供所有模板类型。

我希望能够尽可能简洁地创建 MyTask 的实例,即:

但是,编译器坚持认为它不能推导出 T,而是想要:

这不是一个巨大的交易破坏者,但重复似乎是不必要的。有没有办法按照我想要的方式得到它?

0 投票
1 回答
93 浏览

c++ - 哪个 foo 模板将被实例化?

鉴于此代码:

我有上面的 c++ 程序,我只是想知道,根据标准中规定的规则,两个“foo”模板中的哪一个将被实例化用于 main.js 中的“foo”调用。

0 投票
1 回答
223 浏览

c++ - 创建与推导参数具有相同类型的局部变量的最简单方法是什么?

即:

到目前为止,我正在使用:

但我真的希望有一个更简单的选择!

0 投票
4 回答
77 浏览

c++ - 使用可变数量的模板化参数访问模板化类的成员

我有一个带有可变数量的模板化参数的模板化类。在这些情况下(我买不起 C++11),一个好的做法是创建一个我们调用的默认类none并将其设置为默认类,如下所示。

在这个阶段,我不知道如何实现可以访问每个模板化参数的通用/模板化访问器函数。

所有的模板化参数都是不同的,所以我为每个模板化参数专门化了 A::extract()。

有没有更好的方法来做到这一点?我可以看看任何类型的标签吗?

0 投票
1 回答
1041 浏览

c++ - C++ 模板:向编译器提示模板参数?

我有以下类定义:

有没有办法可以以某种方式向编译器提示这一点(并断言不正确的输入?)

0 投票
1 回答
72 浏览

c++ - 将函数作为模板类型传递并在 C++ 中扣除其类型

如何简化此代码?我想写代码作为评论中的代码。C++11 result_of 和 decltype 似乎有帮助,但我不够聪明,无法编写正确的代码来推断类内函数 f 的输入和输出类型。你能帮我看到光吗?谢谢

0 投票
2 回答
67 浏览

c++ - 与 sizeof(T) 混淆的整数类型

我得到了上面的类,现在我想给它添加一个重载,operator>>这样我就可以做到:

所以我创建了这个重载函数:

但我不确定它是否有效,因为整数类型被转换成int然后搞砸了sizeof(T)

0 投票
1 回答
6990 浏览

c++ - 什么是非演绎上下文?

我最近偶然发现了“为什么模板参数推导在这里不起作用? ”,答案可以总结为“这是一个非推导的上下文”。

具体来说,第一个说它是这样的,然后重定向到“详细信息”的标准,而第二个引用标准,至少可以说是神秘的。

有人可以向像我这样的凡人解释什么是非推断上下文,它何时发生以及为什么会发生?