template-argument-deduction相关内容
我一直在试验一个用于可组合管道的系统,它涉及一组可能是模板化的“阶段”。每个阶段处理自己的设置、执行和清理,模板演绎用于构建流水线使用的“状态”的最小列表。这需要相当多的样板模板代码,这已经显示出一些明显不一致的行为。尽管实验成功,但由于无效的实例化,实际将其放入我们的代码库中会导致错误。 花了一些时间来找出玩具(工作的)解决方案和更丰富的版本之间的差异,但最终缩小到显式命名空间规范。
..
GCC和clang对于是否应该编译以下代码意见不一: template struct tuple {}; template struct Test; template typename... Outer, // XXX Types
..
假设我有一个类/结构模板及其构造函数的显式推导指南。让这个类有两个模板参数,其中一个可以通过演绎指南推导,另一个不能。 template struct Foo { template Foo(F&&) { } }; template using alias = T;
..
考虑以下代码: #include #include 模板结构 custom_wrapper{模板custom_wrapper(Arg arg): 数据(arg) {}T数据;};模板custom_wrapper(Arg arg) ->custom_wrapper;模板结构 custom
..
我有以下模板化函数(编译器中启用了 C++ 最新标准 - 但也许 17 个就足够了). #include 模板void MyFunction(const std::function& callback);int main(){MyFunction(std::function([](int){}));MyFunction([](int){});} 第一个调用编译,当我将它显式转换为 std::f
..
我正在检查 clamp在boost中: templateT常数&钳位 (T const& val,typename boost::mpl::identity::type const &瞧,typename boost::mpl::identity::type const &嗨,Pred p){//断言 ( !p ( hi, lo ));//不能断言 p ( lo, hi ) b/c 它们可能相
..
考虑以下代码: template 结构列表{模板 列表(参数...){static_assert(sizeof...(Types) > 0);}};模板 列表(参数...)->list;int main(){列表 l{0, 0.1, 'a'};} 我希望 decltype(l) 是 list.不幸的是,g++ 7.2 和 g++ trunk 未能通过静态断言.clang++ 5.0.0 和 c
..
我知道,给定一个花括号初始化器,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
..
考虑这个模板函数: templateReturnT foo(const std::function& fun){返回乐趣();} 为什么编译器不能从传递的调用签名中推导出ReturnT? bool bar() {/* ... */}foo(bar);//有效富(酒吧);//错误:没有匹配的函数调用 解决方案 std::function酒吧;富(酒吧);//工作正常 C++ 无法从您的函
..
我希望能够使用模板推导来实现以下目标: GCPtrptr1 = GC::Allocate();GCPtr Bptr2 = GC::Allocate(); 而不是(我目前拥有的): GCPtrptr1 = GC::Allocate();GCPtr Bptr2 = GC::Allocate(); 我当前的 Allocate 函数如下所示: 类GC{上市:模板 静态 GCPtr T分配();}
..
阅读C++11标准我无法完全理解以下语句的含义.非常欢迎示例. 使用两组类型来确定偏序.对于每个在所涉及的模板中,有原始函数类型和转换的函数类型.[注:转换类型的创建在 14.5.6.2 中描述.— 尾注] 演绎过程使用转换类型作为参数模板和原始类型其他模板作为参数模板.这个过程做两次对于偏序比较中涉及的每种类型:一次使用转换后的 template-1 作为参数模板,template-2 作
..
C++17 标准引入了“模板推导指南".我认为它们与此版本标准中引入的构造函数的新模板参数推导有关,但我还没有看到关于它们是什么以及它们的用途的简单的、常见问题解答式的解释. 什么是 C++17 中的模板推导指南? 我们为什么(以及何时)需要它们? 我如何声明它们? 解决方案 模板推导指南是与模板类相关联的模式,它告诉编译器如何将一组构造函数参数(及其类型)转换为类的模板
..
我偶然发现了“为什么是模板参数推导在这里不起作用?"最近,答案可以总结为“这是一个非推导的上下文". 具体来说,第一个说它是这样的,然后重定向到“细节"标准,而第二个引用标准,至少可以说是神秘的. 有人可以向像我这样的凡人解释一下什么是非推断上下文,它何时发生,为什么会发生? 解决方案 推导 是指从给定参数中确定模板参数类型的过程.它适用于函数模板、auto 和其他一些情况(例
..
我试图将函数 std::max 作为模板参数传递给模板化函数,但由于某些原因,编译器打印出无法推断函数类型的错误.一个简单的例子重现了同样的问题.它适用于自己的 max2 函数,但不适用于 STL std::max: #include 模板T max2(const T& a, const T& b) { return std::max(a, b);}int main() {#如果 1自动 f =
..
std::bind() 的函数签名 如下: 模板 所以 args 是一个可变参数模板通用参考,如果我理解正确的话.通用引用的传统模板类型推导规则如下: 如果传递给 T 的参数是左值,则将 T 推导为左值引用 如果传递给 T 的参数是右值,则将 T 推导为左值 ... 我认为这些规则将分别应用于 args 中的每个 arg,这意味着所有左值都作为参数传入 std::bind()函子
..
比方说,我有以下一段代码: #include 模板结构 E {};模板 void func (E, Ts...) {std::cout
..
非常简化的例子(不用管A类和操作符在做什么,只是举例): #include 使用命名空间标准;模板 A类{民众://从 int 隐式转换A(int a) : a_{is_signed ?-a:a}{}国际a_;};bool operator==(A lhs, A rhs) {返回 lhs.a_ == rhs.a_;}bool operator==(A lhs, A rhs) {返回 lhs.a_
..
请考虑以下代码段: struct S {S(){}模板结构T {T(B&){}};模板T(B&)->T B;};int main(){S :: T t {0};} C语接受,而GCC
..
我遍历了C ++模板独特的书本,我试图了解 std :: array 的演绎指南是如何工作的.关于标准的定义,以下是声明 模板array(T,U ...)->array
..
考虑以下模板类的实现: template类MyClass{上市:无效setVar1(const T& v1){var1 = v1;}无效setVar2(const T1& v2){var2 = v2;}T var1;T1 var2;}; 如果模板参数 T 是基本类型(例如 float , double 或 long double )我想要 T1 = T . 如果模
..