问题标签 [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 回答
164 浏览

c++ - g++:在临时对象的情况下,编译无法推断出引用数组

我在以下代码中面临编译错误。我期望即使是临时对象也可以绑定到 const 引用。所以我想知道它应该是有效的代码。但是,g++ 给了我这个错误,而 clang 不会给我这样的错误。有没有人让我知道发生这种情况的确切原因?

0 投票
4 回答
99 浏览

c++ - 我可以写一些像 make_tuple 那样使用类型推导的东西吗?

我可以写也可以写make_tuple<int,bool>(1,true)make_tuple(1,true)编译器会推断出它的类型。这种能力是否适用于我编写的代码,或者它是否以某种方式内置在我无法访问的编译器中?

0 投票
1 回答
283 浏览

c++ - C ++模板参数推导不起作用

我需要覆盖 和 之间的boost::signals2::signal连接boost::function。为此,我创建了以下模板函数:

我想bind尽可能简单地使用它。从我在类似问题的帖子中读到的内容,模板参数应该从函数参数中推导出来。但在我的情况下,当没有明确的参数时它不起作用。

我错过了什么吗?
是否有任何解决方法可以避免显式模板参数?

0 投票
1 回答
134 浏览

c++ - 在模板参数推导中 sqrt 如何(复杂的) 匹配 sqrt() 函数调用?

在这段代码中,如何sqrt<double>(complex<double>)最终成为模板参数推导的候选者?作者说任何匹配的呼叫sqrt<T>(complex<T>)也匹配sqrt<T>(<T>)。如何?

代码来自Bjarne Stroustrup的 The C++ Programming Language。第 13.3.2 节

0 投票
1 回答
1788 浏览

c++ - C++ 中的部分模板函数规范有效,但为什么呢?

我试图找出模板函数的部分规范是否是 C++ 标准的一部分,或者这是否是特定于编译器的东西。

通过部分规范,我的意思是仅指定编译器无法推断的类型。因此,如果我有一个模板函数“f”,它采用 3 种类型,其中一种用于参数并且可以推导出来,我可能会使用表单调用“f”f<type, type>(parameter)

这是一个例子:

我已经用 g++ 4.5.3、g++ 4.6.3、VS2010 和 VS2012 对此进行了测试。由于它似乎得到了编译器的广泛支持,我敢打赌它是标准的一部分,但有人能证实吗?有没有人有任何资源链接或指针可以解释为什么这样做?

0 投票
1 回答
648 浏览

c++ - 默认与推导模板参数?

在下面的 :


在函数test中做了什么:

情况1:默认参数为priority:MyClass<Type>(const MyClass<OtherType>& x)隐式调用转换构造函数并被MyClass<Type>::test<Type>(const MyClass<Type>& x)调用。

情况2:推导的参数是优先级:MyClass<Type>::test<Type>(const MyClass<OtherType>& x)被调用。


我认为好的答案是第二个,但我不确定。您能否向我确认(并且这种情况已被标准明确定义)?


编辑:测试功能由以下人员调用:

0 投票
1 回答
198 浏览

c++ - 嵌套模板可变参数非类型列表的类型推导

考虑以下类:

我无法修改这些类。

是否可以编写一个帮助类或函数或其他东西,它将返回可变参数列表的类型:

size_t如果可变参数列表为空?

0 投票
2 回答
688 浏览

c++ - 没有匹配的函数调用模板选择排序函数(C++)

我正在玩模板,我想知道为什么使用模板会出现不匹配的功能错误。

0 投票
3 回答
2756 浏览

c++ - c++中基于范围的for循环

似乎 C++11 中可用的“for each”语法风格允许数组迭代,而不需要知道数组的实际大小(元素数量)。我假设,因为它是新标准的一部分,所以这是完全安全的,即使对于 C 数组也是如此。通常,您还必须在操作之前单独知道 C 数组的大小,但我希望任何使用过这种新 C++ 技术的人验证它的工作方式完全符合您的预期:

关于这种技术的非明显副作用或缺点,我有什么需要了解的吗?它在我看到的代码中没有显示太多,可能是因为大多数代码都是在标准中之前编写的。想确保它的罕见用法不是因为其他一些不为人知的原因。

0 投票
2 回答
688 浏览

c++ - 模板函数类型推导和运算符<<

当我使用MSVC++编译以下代码时,出现错误:

g++clang都可以很好地编译这段代码。AFAIK,' ok ' 和' error ' 行做同样的事情,类型T被推导出为void(&)()。还是允许对函数进行void()和右值引用?如果是这样,它们的含义是什么?像这样通过引用传递函数可以吗?是MSVC++错误,它无法编译“错误”行吗?顺便说一句,错误输出: