template-argument-deduction相关内容

使用显式命名空间限定符时,模板实例化行为会发生变化吗?

我一直在试验一个用于可组合管道的系统,它涉及一组可能是模板化的“阶段”。每个阶段处理自己的设置、执行和清理,模板演绎用于构建流水线使用的“状态”的最小列表。这需要相当多的样板模板代码,这已经显示出一些明显不一致的行为。尽管实验成功,但由于无效的实例化,实际将其放入我们的代码库中会导致错误。 花了一些时间来找出玩具(工作的)解决方案和更丰富的版本之间的差异,但最终缩小到显式命名空间规范。 ..

为什么花括号初始化器的自动和模板类型推导不同?

我知道,给定一个花括号初始化器,auto 将推导出 std::initializer_list 的类型,而模板类型推导将失败: auto var = { 1, 2, 3 };//类型推导为 std::initializer_list模板void f(T 参数);f({ 1, 2, 3 });//不编译;类型推导失败 我什至知道这是在 C++11 标准中指定的地方:14.8.2.5/5 bull ..

模板推导中的偏序过程是什么

阅读C++11标准我无法完全理解以下语句的含义.非常欢迎示例. 使用两组类型来确定偏序.对于每个在所涉及的模板中,有原始函数类型和转换的函数类型.[注:转换类型的创建在 14.5.6.2 中描述.— 尾注] 演绎过程使用转换类型作为参数模板和原始类型其他模板作为参数模板.这个过程做两次对于偏序比较中涉及的每种类型:一次使用转换后的 template-1 作为参数模板,template-2 作 ..

什么是模板推导指南,我们应该在什么时候使用它们?

C++17 标准引入了“模板推导指南".我认为它们与此版本标准中引入的构造函数的新模板参数推导有关,但我还没有看到关于它们是什么以及它们的用途的简单的、常见问题解答式的解释. 什么是 C++17 中的模板推导指南? 我们为什么(以及何时)需要它们? 我如何声明它们? 解决方案 模板推导指南是与模板类相关联的模式,它告诉编译器如何将一组构造函数参数(及其类型)转换为类的模板 ..
发布时间:2021-12-13 18:22:52 C/C++开发

什么是非演绎上下文?

我偶然发现了“为什么是模板参数推导在这里不起作用?"最近,答案可以总结为“这是一个非推导的上下文". 具体来说,第一个说它是这样的,然后重定向到“细节"标准,而第二个引用标准,至少可以说是神秘的. 有人可以向像我这样的凡人解释一下什么是非推断上下文,它何时发生,为什么会发生? 解决方案 推导 是指从给定参数中确定模板参数类型的过程.它适用于函数模板、auto 和其他一些情况(例 ..
发布时间:2021-12-01 15:10:36 C/C++开发

用于存储指向 std::max 的函数指针的自动变量

我试图将函数 std::max 作为模板参数传递给模板化函数,但由于某些原因,编译器打印出无法推断函数类型的错误.一个简单的例子重现了同样的问题.它适用于自己的 max2 函数,但不适用于 STL std::max: #include 模板T max2(const T& a, const T& b) { return std::max(a, b);}int main() {#如果 1自动 f = ..
发布时间:2021-11-30 18:17:22 C/C++开发

std::bind 如何按值获取可变参数参数,即使使用其通用引用?

std::bind() 的函数签名 如下: 模板 所以 args 是一个可变参数模板通用参考,如果我理解正确的话.通用引用的传统模板类型推导规则如下: 如果传递给 T 的参数是左值,则将 T 推导为左值引用 如果传递给 T 的参数是右值,则将 T 推导为左值 ... 我认为这些规则将分别应用于 args 中的每个 arg,这意味着所有左值都作为参数传入 std::bind()函子 ..