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

c++ - 数组大小模板扣除

我有一个存储std::array.

数组的大小是在编译时评估的,这是因为应用程序在嵌入式设备上运行,所以没有动态分配 :(。代码看起来像这样:

我不知道如何构造我想要的构造函数。一个星期以来,我已经尝试了几十种设计,但没有一个能得到我想要的。以下是我尝试过的事物的名称:

  1. 模板扣除指南 - 也是模板版本,我不确定它们是否合法......
  2. std::initializer_list- 列表的大小不能放在模板参数中。至少不是在非 constexpr 上下文中。
  3. std::array
  4. 普通的旧数组
  5. using关键字 - 也是模板化的。

铊;博士:

如何从构造函数的签名中的给定数组中推导出表示数组类型大小的模板参数值?

0 投票
2 回答
147 浏览

c++ - 可变参数模板的类型推导

问题:

我想要一个类的推导指南,该类采用可变数量的由可变参数模板构造的对象。

例如

我现在想提供一个扣除指南,如果我打电话:

我将得到一个类型的对象:

因此,每次我只提供一个初始化列表作为参数时,它都应该被推导出为一个“ y”对象。

简单类的示例:

如果我只有一个具有一个模板参数的类,我可以通过以下方式实现:

编辑:

以下内容也应该起作用:

0 投票
2 回答
379 浏览

c++ - 为什么我们不能在内联命名空间之外声明一个推导指南?

例子:

这会导致 Clang 11 中的编译错误,即“必须在与模板相同的范围内声明推导指南X::Y::A

与模板特化类似,演绎指南也应该在与类模板相同的语义范围内声明。那么,为什么我可以在 inline 命名空间之外专门化类模板,而对于演绎指南却不能呢?

特别是,这会导致另一个问题:

如果我想定义一个带有转换的类模板 std::vector并为它声明一个推导指南,编译器会拒绝。在这种情况下(对于 libc++),我必须在namespace std::__1.

CPP标准中是否有一些解决方案或解释?

0 投票
1 回答
76 浏览

c++ - 用户定义的标准类型推导指南

由于某种原因,在clang中仍然缺少预期的CTADstd::initializer_list

添加如下用户定义的指南可以解决此问题

但是是否允许为std::类型添加 CTAD 的用户定义指南?

0 投票
0 回答
50 浏览

c++ - CTAD 和带有参数包成员的模板构造函数

尝试将通用引用与 CTAD 和参数包一起使用,我尝试了类似下面的方法,但它无法在 MinGW GCC 上编译。我不明白为什么。这是示例代码:

这些是错误:

0 投票
1 回答
193 浏览

c++ - 成员函数指针的 std::invoke 替换失败

我正在使用 webview(在这里找到:https ://github.com/webview/webview )来创建一个带有 html/js gui 的 c++ 程序。为了从 js 调用 c++ 函数,它们必须是std::string function(std::string). 这对于自由函数来说是相当微不足道的,但是如果你想将指针传递给成员函数,它似乎并不那么微不足道。

因此,我编写了一个类,它存储对对象及其函数的引用,并在构造函数中调用 webview::bind,并使用解析字符串输入的 lambda 函数调用该函数。然后它将结果转换为字符串(我假设这将用于存在可以执行此操作的函数的情况)并返回。

现在奇怪的是,这似乎适用于没有参数的成员函数(例如下面的 testcase::num),但如果我包含一个带参数的成员函数,我会收到错误:

下面的示例代码是在 Mac 上编译的 g++ testcase.cpp -o testcase -std=c++17 -framework WebKit

谢谢你的帮助

0 投票
2 回答
138 浏览

c++ - 如何将 CTAD 用于 lambda?

大家下午好。我实现了几个类:

你可以像这样使用它:

在 17 标准中,您可以使用以下内容:

但是你不能像这样使用它(使用 lambda):

也许我错过了某处的标准信息,或者它可能无法实施。请告诉我。我会很高兴任何信息。

错误:

0 投票
1 回答
85 浏览

c++ - CTAD 无法在部分专业化中使用 SFINAE 推断模板参数

我尝试在部分专业化中将 CTAD 与 SFINAE 结合使用,但除非我添加看似无用的推导指南,否则它不会编译。背后的原因/限制是什么?

0 投票
1 回答
962 浏览

c++ - Clang 或 GCC 在拒绝/接受此 CTAD 代码时是否正确?

Clang 和 GCC不同意接受此代码。

标准要求的行为是什么?

注意:我知道这是 C++,所以标准可能是模糊的,但我认为一种行为是正确的。

0 投票
1 回答
52 浏览

c++ - C++ 只提供不可推导的模板类型

假设我们有一个依赖于两种模板类型的类,其中一种是我们专门研究构造函数,我们可以不专门研究可推导类型吗?