问题标签 [deduction-guide]

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

c++ - How to automaticly deduce template parameter for a function parameter of type `basic_string_view` or the like?

The following is not working:

I want to use the deduction guide (implicit or otherwise) of basic_string_view in the function f. How is that possible ?

0 投票
1 回答
272 浏览

c++ - 我可以在 `std` 命名空间中添加推导指南吗?

假设我想制作一个新的扣除指南,使以下成为可能?

那会是一个好的定制吗?

0 投票
1 回答
91 浏览

c++ - What are my options for adding deduction guides for stl types

This post already explains how adding deduction guides in the std namespace is undefined.
Now, what I would really like to do is this:

So this is what I've tried:

And it works

My question now is:
Q: Is this my only option for adding deduction guides for stl types? Are there other options?

0 投票
1 回答
90 浏览

c++ - 为什么使用 typedef 时类推导指南会失败?

在我目前编写的一段代码中,我使用了类推导指南。您可以在下面找到精简为一个简单(但无意义的示例)的代码摘录:我有一个 class User,它从构造函数的第一个参数派生其第一个模板参数,第二个来自参数包的大小作为第二个参数提供:

这工作正常(编译)。但是,当我通过将参数包的类型替换为依赖于模板参数的类型来进行微小修改switcher时,推导失败:

这是为什么?

代码的两种变体都可以在这里找到。

0 投票
1 回答
98 浏览

c++ - 可变参数模板错误:“在实例化中”(gcc 9.2)

我正在 Jason Turner 的youtube 频道上学习关于 c++17 的可变参数模板,然后我复制了他的示例代码(如下所示)。在他的视频中,他使用了带有 gcc 7的网站godbolt.org 。

我使用 gcc 9.2 在我的计算机上尝试了代码,但出现以下错误:

在 'Merged::Merged(T&& ...) 的实例化中(使用 T = {const main()::&, const main()::&, main()::}; B = {}]':

我尝试使用 Godbolt 站点进行检查,但它也无法编译(使用 gcc 7.1 和 gcc 9.2)并给出更多错误,例如:

错误:在“合并”之前缺少模板参数合并合并(l1,

错误: ')' 标记 [](const double d) { return d * 3.2; 之前的预期主表达式;});

这个错误是什么意思,我需要做些什么来修复它?

在我的电脑中编译行:

神箭试试

0 投票
1 回答
102 浏览

c++ - 模板模板参数推演指南

我有一组这样的结构类:

我正在尝试为这个类模板创建一个演绎指南......

当模板参数恰好是模板本身时,我不确定此的正确语法,其中模板化参数将是类将存储的函数指针、函数对象、仿函数或 lambda。

当我尝试在其中使用U不允许Func<>状态并且如果我将其删除为没有任何模板参数时,它会指出“模板模板参数'Func'的参数列表丢失” ......type nameFunc

我的预期用途Bar如下所示:



编辑- 本部分适用于用户:piotr-skotnicki

注意:上面是一个伪代码,与我的类的表示具有相同的签名......现在我可以再次访问我的 IDE,这里是“真实”源。

积分器.h

主文件

事先 Visual Studio 抱怨它无法推断模板参数Func......我不知道为什么......

我不知道发生了什么……也许 Visual Studio 出了问题……它现在似乎正在工作……很奇怪……

0 投票
2 回答
3262 浏览

c++ - `std::make_optional` 的意义何在

std::make_C++17 引入了Class 模板参数推导(除了make_uniqueand make_shared) ,使所有这些都变得多余。

那么有什么意义std::make_optional呢?据我所知,它std::optional.

是否存在std::make_optional优先于扣除指南的情况?

0 投票
1 回答
453 浏览

c++ - 如何在 C++20 中为模板别名创建推导指南?

假设我有一个类/结构模板及其构造函数的显式推导指南。让这个类有两个模板参数,一个可以由推导指南推导,另一个不能。

如果我现在创建一个别名,它将显式指定以前不可推导的参数,据我所知,这个别名的隐式生成的推导指南应该能够完全推导两个模板参数(通过标准模板参数推导的规则),即使在定义类模板中未推断出一种类型。

但是在我不使用alias但是的情况下我该怎么办alias2,即将扣除指南更改为

根据文档,现在这将引入一个非推导上下文(因为模板参数出现在范围运算符的左侧::),因此模板参数推导T=F应该失败(显然失败)。


问题1:如果这个理论是正确的,我能做些什么吗?假设我不想使用微不足道的身份别名,而是使用更复杂的类型转换,最终将typename transformation<Input>::result在演绎指南中具有 a 的形状。

问题 2:即使是现在,当我完全删除 Q 时,我的理论仍然失败,因为以下代码将被接受(通过 GCC-10/11):

为什么即使这是非推导上下文,编译器也能够从 F 推导出 T?

0 投票
2 回答
207 浏览

c++ - 降维的多维数组模板

我想制作一个NDArray具有固定尺寸但可以在每个尺寸上调整大小的模板。

我的问题是如何使它能够根据使用了多少对来推断构造函数中的尺寸{}?构造函数中的元素将用于初始化一些元素。

0 投票
1 回答
25 浏览

operator-overloading - 推导出没有模板的冲突类型

我正在尝试创建一种可以存储 int、double 或 uint 的类型,如下所示:

当我尝试使用它时,我得到了关于“推断冲突类型”的错误。我在某处读到“演绎指南”可以提供帮助,但它似乎需要模板。我的类型不需要模板。

有没有一种解决方案可以使用这种 Value 类型,而无需每次都将其转换为 int、double 或 uint?

我对操作员也有同样的问题(有不同的错误消息)

我想我应该添加更多的运算符重载,但我没有找到哪一个。