草庐IT

c++ - 从类定义中推导模板参数类型

是否可以使用classtemplateargumentdeduction上课C来自C之一的定义内的成员函数?...还是我被迫写我的make_c类似于C++03中的辅助类?考虑这个构建任意函数对象链的最小化和简化场景:templatestructnode;templatenode(FFwd&&)->node>;node类存储一个通过完美转发初始化的函数对象。我需要一个演绎指南这里decay函数的类型对象。templatestructnode{F_f;templatenode(FFwd&&f):_f{std::forward(f)}{}templateautothen(FThen&&f_t

c++ - 通过 C++ 模板元编程从数组名称推导数组维度

我记得十年前,有一段代码使用c++模板元编程,可以从数组名推导出数组维数。例如inta[2][3][4][5][6];cout输出:5但是我忘记了那个代码的细节。我记得它使用了sizeof(a)/sizeof(a[0])技巧。有谁知道怎么写吗? 最佳答案 原始代码可能构建了今天由std::rank提供的内容,请参阅“可能的实现”部分;因为不必继承整数常量(那时候不存在),它可以修改为:templatestructrank{staticsize_tconstvalue=0U;};templatestructrank{staticsiz

c++ - 为什么参数推导在这个模板模板参数中不起作用

我有以下模板函数,它的参数是模板模板参数。templateclassCONTAINER=std::vector>voidmerge(typenameCONTAINER::iteratorit){std::cout下面的代码使用了这段代码。std::vectorvector1{1,2,3};merge(begin(vector1));它按预期工作,但是当我使用merge(begin(vector1));它无法推断出T的类型.我认为它可以从std::vector::iteratorit;推导出类型作为int.为什么编译器无法推断类型? 最佳答案

C++0x decltype 推导成员变量常量失败

考虑以下代码:templateclassB{};templateBf(T&t){returnB();}classA{classC{};Cc;public:A(){}decltype(f(c))get_c()const{returnf(c);}};intmain(){Aa;a.get_c();}当我尝试编译它时,出现错误:test.cpp:Inmemberfunction'BA::get_c()const':test.cpp:31:46:error:conversionfrom'B'tonon-scalartype'B'requested似乎在decltype中,编译器不知道这是一个co

c++ - 为什么在这种情况下 c++ 模板参数推导失败?

我正在尝试编写自己的委托(delegate)系统来替代boost::functions,因为后者做了很多我认为有问题的堆分配。我已经写了这个作为替换(简化,实际使用池内存和新位置,但这很简单,可以重现错误):templatestructDelegateFunctor:publicMyFunctor{DelegateFunctor(void(*fptr)(A,B),Aarg1,Barg2):fp(fptr),a1(arg1),a2(arg2){}virtualvoidoperator()(){fp(a1,a2);}void(*fp)(A,B);//Storesthefunctionpoi

c++ - std::begin 如何推导 braced-init-list 的类型?

以下代码失败:templatevoidfunc(T&t){}intmain(){func({1,2,3});}但是对于autoa={1,2,3};它是有效的,因为规则允许auto推导出一个std::initializer_list。std::begin如何编写以允许std::begin({1,2,3})工作? 最佳答案 std::begin({1,2,3})有效是因为std::begin有一个overloadtakinganstd::initializer_list. 关于c++-std

c++ - 在 C++ 中推导模板返回类型

目前,我尝试编写一个函数retrieveKeys(),它给我std::map的键并将其存储在一些std::container中。该函数应在两种方面具有通用性:接受std::map和std::unordered_map作为参数类型。返回用户定义容器中的key,例如。G。std::vector或std::deque(容器必须支持push_back()方法)。目前该函数的使用方式如下:std::unordered_maptestMap;std::maptestMap2;std::vectorkeys1=retrieveKeys(testMap);std::dequekeys2=retriev

c++ - 隐式模板推导指南可以推导引用类型吗?

在使用gcc7测试C++17推导指南行为时,我发现这个例子失败了:templatestructS{S(T&&v){}};inti=10;autov=S(i);根据我从cppreference读到的内容,我以为v应该是S类型.然而gcc7不编译此代码提示int&不能绑定(bind)到int&&(通用引用机制失效)。所以我的问题是:gcc7应该推导出v类型为S?工作草案标准中哪里描述了自动扣除指南? 最佳答案 [over.match.class.deduct]中的规则是:Asetoffunctionsandfunctiontemplat

c++ - 当相同的约束必须推导不同的类型时,为什么将概念放入类型说明符会导致类型推导失败?

我们有:templateconceptboolNumerics=(std::is_arithmetic_v&&...);templateconceptboolNumeric=std::is_arithmetic_v;然后我们让编译器推导出所有的数字:templaterequiresNumericsautofoo(Targ1,Uarg2,Varg3,Warg4){return0.0+arg1+arg2+arg3+arg4;}std::cout编译器像预期的那样推导所有参数类型:autofoo(int,double,float,longdouble):当我们尝试将约束分布到类型说明符中以编

c++ - Lambda 类型推导

autodothings=[](longposition){autovariable;/*dothings*/returnvariable;};floatx=dothings(1l);chary=dothings(2l);基本上,我很好奇的是,lambda内部的变量是否有可能以任何方式推断返回值分配给的类型,在这种情况下它是float和char。有没有等同于模板类型名的东西?谢谢。 最佳答案 这可以做到,但它a)有点复杂,b),在99.9%的情况下,这并不是一个好主意。以下是您的操作方式。您可以根据将表达式分配给的类型执行某些操作的