问题标签 [ctad]

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

c++ - 如何使用模板构造函数定义推导指南?

为了简化我的问题,我将std::unique_lock用作解释的工具。std::unique_lock 有一个模板参数,即互斥锁。但是,它的构造函数也是一个模板函数unique_lock(TMutex &, const chrono::duration<_Rep, _Period>&)

当一个人使用它时,可以写:

所以,问题是:如何为此写出演绎指南(不改变行为),怎么做?

到目前为止我最好的尝试:

不幸的是,clang 不接受这一点:

错误:模板特化或离线模板定义中的多余模板参数列表

0 投票
1 回答
471 浏览

c++ - C++20 中的 CTAD 和指定初始值设定项

我已经在这个问题中用指定的初始化程序对 CTAD 表示了混淆,但是我对非常相似的代码片段有另一个混淆

即使我没有在指定的初始化程序中给出明确的说明,演绎指南似乎first也会将 的类型推断为。推导指南显然只关心初始化程序中的顺序,不管关键字 ( )。扣分指南应该聪明一点,还是应该有一个“指定扣减指南”?float.first.second

请参阅https://godbolt.org/z/cm6Yi7上的示例

0 投票
3 回答
393 浏览

c++ - 使用大括号初始值设定项列表时模板参数推导失败

我正在尝试在“垂直()”函数中使用模板参数推导:

然而,这不会编译;铿锵声(带-std='c++17')说:candidate template ignored: couldn't infer template argument 'component' offset<component> perpendicular(offset<component> const &o) {

我应该辞职写作perpendicular(offset{1.0, 2.0})还是有办法给编译器一个提示?

0 投票
1 回答
64 浏览

c++ - 有没有办法获得模板的别名并保留类模板参数推导?

我们还被迫使用宏吗?使用它们有很多缺点......

0 投票
0 回答
61 浏览

c++ - 以包装器指针作为函数参数的函数包装器的 CTAD 递归问题

我有一个模板类型等于函数返回类型的模板化函数包装器。此外,函数的第一个参数是指向包装器本身的指针。

我在这里尝试使用用户定义的推导指南,以避免指定模板类型,这样我就可以像使用它一样

但是由于递归,我不知道应该用什么替换以下指南中的问号。

ctad 在这里仍然可行吗,如果可以,怎么办?

0 投票
0 回答
110 浏览

c++ - 类模板参数推导(CTAD)应该在模块内工作吗?

给定以下模块

用clang编译: clang++ -std=c++20 -stdlib=libc++ -fmodules -c -Xclang -emit-module-interface -o mod.pcm mod.cpp

以及以下应用程序代码:

编译: clang++ -std=c++20 -stdlib=libc++ -fmodules -fimplicit-modules -fimplicit-module-maps -fprebuilt-module-path=. main.cpp

后者失败并显示以下错误消息:

当然,我可以更改模块代码并指定模板参数。但是,我想知道:

模块代码或编译器错误是否会出现这种行为?

0 投票
0 回答
135 浏览

c++ - 为什么 C++17 中 std::unique_ptr(new int()) 的 CTAD 失败?

为什么 C++17 类模板参数推导失败 std::unique_ptr(new int());

编译器可以想象它是什么而不是std::unique_ptr<int>

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

c++ - 类模板参数推导 - clang 和 gcc 不同

以下代码使用 gcc 编译,但不使用 clang 编译

clang 提供的编译错误(版本 10.0.0 带有 -std=c++20):

什么是正确的行为?

0 投票
2 回答
129 浏览

c++ - 模板相关参数的类模板参数推导

让我们从一个简单的类 add 方法开始number

现在我们想number变成一个模板类:

尝试调用add与我们调用的简单非模板相同的方法,基于(理论上!)基于CTAD

请注意,如果add是友元函数,则number根据ADL使用参数之一调用它是可行的:

任何建议如何允许模板类的行为类似于非模板,在调用 add 时自动转换?


编辑: 这个问题是根据发表的评论编辑的。应该强调的是,对于像add这样的自动转换这样的通用函数可能是一个错误的想法,但假设该方法非常具体,例如doSomethingWithNumbers.