问题标签 [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 投票
5 回答
208 浏览

c++ - “AnySTLContainer”的模板" C++

我正在寻找一种方法来提供一个函数,该函数采用模板化 (STL) 容器,但要求其元素为某种类型(例如int)。

这些函数调用应该是有效的:

这些函数调用应该是无效的:

有没有办法模板化“foo”以便int接受容器,但不接受具有不同元素类型的容器?

最好的,本

0 投票
1 回答
130 浏览

c++ - 函数模板推导和initlializer_list

我有以下功能模板:

我调用函数如下:

它工作正常。

但是,如果我尝试如下调用它:

它无法推断出正确的类型,并且出现以下编译错误:

如果我这样称呼它:

类型推导有效,但如果我尝试如下调用它:

我得到与以前相同的编译错误。

我的问题是:

为什么模板类型推导在 (c) 中有效,但在 (d) 中无效?

(编译器是 gcc v4.6.3,带有标志 -std=c++11)

我看过类似的、较旧的 SO 帖子,但他们似乎并没有完全回答这个问题。

0 投票
2 回答
107 浏览

c++ - 如果通过引用传递二维数组,为什么编译器不能计算数组的大小

只是想知道-我写了以下功能

并称它为

编译运行没有错误。但是,如果我将“arr”更改为引用

我会有错误:

我知道如何解决它

但我不明白为什么会这样?

0 投票
3 回答
466 浏览

c++ - 无法推断可变参数模板的模板类型

我创建了简单的基于回调的事件管理器并且它可以工作,但是我有一些零模板参数的错误。

我正在使用此代码添加回调:

第二个问题:是否可以更改代码以删除<unsigned int>类似模板规范?

例子:

0 投票
1 回答
219 浏览

c++ - 为什么此模板推理失败

此代码无法使用 clang++ 6.0 或 g++4.9.1 编译(代码没有意义,但这是实现它的最小示例):

我收到这个错误

要修复它,我需要bar()像这样更改 's 调用:

我不明白为什么编译器无法推断模板参数,奇怪的是编译器对foo().

0 投票
1 回答
1471 浏览

c++ - “boost::mpl::identity”有什么意义::在此输入?

我正在检查clampin boost 的实现:

如果我查看文档,identity返回模板参数不变。

身份元功能。返回 X 不变。

那么在这里使用它有什么意义呢?

typename boost::mpl::identity<T>::type等于T

0 投票
1 回答
104 浏览

c++ - 自动检测基类的类型参数

我有以下代码可以正常工作:

这种方法可以在调用 as 时T自动检测类型。当我切换到:intregisterBase(Derived())shared_ptr

我可以防止非法类型,但我似乎无法自动检测类型T。我可以使用一些技巧来自动将 shared_ptr 向下转换为Base<T>模板推导工作吗?还是有另一种方法可以找到 typename T

PS:万一Q扩展乘法Base<T>我想出错(自动推演应该失败)。

0 投票
1 回答
94 浏览

c++ - VisualStudio 2013 中的推论失败,第一个模板参数是特定类型(反过来又被任意模板化)

如果 Argument 是具有特定第一个模板参数(任意模板化)的某个模板,我想要一个特定的函数来进行计算。

考虑这些类

我试图实现我的目标

问题:MSVS 2013 无法推断Y.

错误的原因(根据 MSVS)是:

模板参数const Y<A<Z>> &不能从D<A<int>, B<S>>with推导出来S=A<int>

我的目标是编写一个重载/特化来处理任何给定的类型Y,其中Y::value_type/的第一个模板参数Y可以A<T>是要保留 foo 签名的任何位置:void foo (Y const &);

这是 MSVS 中的错误(因为foo(D<A<int>>());实际上使用 g++ 打印 2)还是我遗漏了什么?

PS:如果你在乎的话,圣诞快乐...

0 投票
2 回答
1245 浏览

c++ - 添加参数后的“模板参数推导/替换失败”

我需要模板函数,它将调用其他函数,其参数取自std::tuple. 我写了一些代码,可以正确编译:

现在我需要再添加一个参数,它是指向函数的指针:

我尝试以许多不同的方式来做,但编译器总是返回template argument deduction/substitution failedinconsistent parameter pack deduction with '' and ''. 我不明白,我的代码有什么问题。编译器输出中没有任何有用的信息。

有人可以帮我正确地写这个吗?

0 投票
2 回答
605 浏览

c++ - 模板参数推导和 SFINAE - 使用 std::enable_if

我正在尝试过滤传递给重载函数模板的类型的方法。我正在使用 Visual Studio 2013。

三部分问题:

  1. 为什么我的编译器不能推断Blorg3
  2. TFoo2(argc)生成编译器错误的原因是否与#1 相同?
  3. 有没有办法将模板参数传递给构造函数?

这是示例代码: