草庐IT

c++ - 模板非类型参数推导

是否可以为c++17函数推导模板值(而非类型)?函数foo:templateintfoo(){return(I);}可以通过以下方式调用:foo();并将返回5。模板类型可以通过函数参数的类型推导出来。是否有可能以某种方式对模板值做同样的事情?例如:templateintbar(constintx){return(I);}这显然行不通(因为对于一个x来说,在它的声明之前是必需的),但是可能有一些C++17技巧允许这样做吗?我想用它来设置常量表达式函数参数。 最佳答案 你想要的只能通过(ab)使用整数推导的类型推导来完成。观察:tem

c++ - 函数中推导参数之前的默认模板参数?

以下在g++中编译没有问题:templateReturnTypefunc(constOtherType&var){ReturnTyperesult=0;/*SOMETHING*/returnresult;}所有符合标准的编译器是否可以在默认模板参数(此处为ReturnType)之后有一个非默认模板参数(此处为OtherType)? 最佳答案 这很复杂。来自C++11规范:Ifatemplate-parameterofaclasstemplatehasadefaulttemplate-argument,eachsubsequentte

c++ - 给 nullptr 一个类型来进行模板推导

假设以下片段:templatevoidfct(T*a,T*b){//dosomething}Aa;fct(&a,nullptr);//Problemhere!这很麻烦,因为调用参数的类型是A*和nullptr_t所以编译器无法推断模板参数T.一般来说,我可以想出几种解决方法:定义A*b=nullptr并使用fct(&a,b)为fct定义一个带有一个参数的重载对于nullptr案例使用fct(&a,static_cast(nullptr))或者是否有更简洁的解决方案,例如创建“typednullptr”之类的东西? 最佳答案 只需将第

C++ 当模板参数推导失败时

为什么C++不能确定我打算创建一个unique_ptr用这个语法?(a之前已声明为unique_ptr)a=unique_ptr(newA());必须包含似乎非常多余.这适用于我使用的大多数函数模板,为什么unique_ptr不行?编辑:C++现在支持make_unique,没有冗余。 最佳答案 std::unique_ptr是一个class模板,而不是function模板。参数推导只发生在function模板,而不是class模板。一个常用的技巧是编写一个函数模板,创建一个实例化类模板类型的对象,例如:templatestd::u

c++ - 如何在 c++1y 的返回类型推导中保留 cv 限定符或引用?

首先,我构建了四个结构,每个结构都返回值、左值引用、const左值引用、右值引用。我在包装器(B或C)中使用它们,在这些包装器的方法func()中,我想保留A的func()的引用和cv限定符。在C++11中,我使用了尾随返回类型。但随着c++14中正常返回类型推导的到来,我猜我可以跳过尾部,但只有auto,返回类型像普通一样忽略限定符和引用自动。然后,我的问题是在c++14中实现它的最佳方法是什么,它的行为就像下面的类B一样?当它很琐碎时,写尾部(通常是decltype(returnexpression))有时会令人沮丧。structA1{intfunc(){returnx;}intx

c++ - 如何解决模板参数推导中的 const/non-const 冲突

我有一个接受std::pair的函数模板以及其中一种类型的值。我想使用来自std::map的条目调用此函数作为对参数。#include#includetemplatevoiddo_stuff(std::pairconst&pair,T1const&val){//Imaginethatthisdoessomethingimportant...}intmain(){std::mapfoo{{0,0.0}};do_stuff(*foo.begin(),0);}编译失败,因为map条目的类型是std::pair,所以T1的类型推导有冲突的类型:constint通过pair参数,和int通过va

图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)

目录概论算法原理1、均值滤波2、中值滤波3、高斯滤波4、双边滤波5、引导滤波 手写代码Opencv代码实现 最后的总结参考文章概论        本来打算是分开推导的,但我觉得还是整个合集吧,避免有水文的嫌疑,那么因为学习的需要,会涉及到图像的滤波处理,我汇总了一些常见的滤波算法,方便日后查看。算法原理1、均值滤波        我将以5*5的区域为例子来讲解:此时,中心点就很容易的被确定了,将所有的数全部加起来后,求取平均值取代中心点的中间值,但是图像的边界并不存在5*5的区域,那么只需要提取在图像内的周围点的像素平均值。附带草稿图:均值滤波本身会存在缺陷,即他不能很好的保护好图像的细节,在

c++ - 使用引用推导模板包中的冲突类型

我正在开发一个具有以下结构的程序:#include#includevoidfun(conststd::string&text,inta,intb){//(1)std::coutvoidexecute(void(*fun)(Args...),Args...args){fun(args...);}voidinit(conststd::string&text,inta,intb){execute(fun,text,a,b);}intmain(){init("Fun:",1,2);return0;}我收到了错误信息.code.tio.cpp:14:2:error:nomatchingfunct

c++ - 模板参数推导

我目前面临一个我自己无法解决的问题。基本上我想做的是在C++中实现一些类似linq的行为。我将从标题中的代码开始:templateclassA,templateclass=A>classC>classqueryable{public:typedefTvalue_type;typedefAallocator_type;typedefCcontainer_type;//(1)typedefqueryabletype;queryable(container_typeconst&){}templatequeryableselect(/*somedelegate*/);//moremethods

c++ - 数组到指针类模板参数推导适用于模板指南,但不适用于非模板版本,这是正确的还是错误?

我有带有单一类型参数和constchar*类型完全特化的类模板,下面的简化示例:templatestructPrettyPrint{PrettyPrint(constT&value):value(value){}constT&value;friendstd::ostream&operatorstructPrettyPrint{PrettyPrint(constchar*value):value(value){}constchar*value;friendstd::ostream&operator简而言之-打印像"abc"这样的字符字符串和像(123)这样的所有其他值(""vs())因此