草庐IT

enable_if_c

全部标签

c++ - 迭代器或指针的 std::enable_if 或 SFINAE

我想为MyClass编写一个带有参数的构造函数,并且我希望仅当参数是一个pointer或iterator(具有iterator_traits的东西)。如何实现? 最佳答案 遗憾的是,没有标准的方法来检测类是否为Iterator模型。最简单的检查是*it和++it在语法上都是有效的;您可以使用标准SFINAE技术执行此操作:template(),void(),++std::declval(),void())>MyClass(T);考虑到24.2.2:2中的Iterator要求:templatetypenamestd::enable_i

c++ - enable_if 有条件地包含成员函数

我有一个模板类,它的类型是迭代器。我想根据模板参数的iterator_category启用/禁用特定成员函数。特别是,我想启用operator--如果模板参数是双向迭代器。我的尝试是这样的:typenamestd::enable_if::value,MyType&>::typeoperator--(){//doworkreturn*this;}Clang告诉我(大致):error:notypenamed'type'in'std::__1::enable_if';'enable_if'cannotbeusedtodisablethisdeclaration有没有办法完成我正在尝试的事情?

c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏

如果我有:#definelikely(x)__builtin_expect((x),1)#defineunlikely(x)__builtin_expect((x),0)if(A)returntrue;elseif(B)returnfalse;...elseif(Z)returntrue;else//thiswillneverreallyhappen!!!!raiseError();returnfalse;我能否像elseif(likely(Z))一样将likely()放在最后一个条件检查周围,以表示在编译器不影响分支预测的情况下最终语句(else)的可能性很小之前的检查?基本上,如果

c++ - 是否可以将 'enable_if' 和 'is_same' 与可变函数模板一起使用?

这两个非可变函数模板编译:templatetypenamestd::enable_if::value,void>::typetestFunction(Ta,Ub){std::couttypenamestd::enable_if::value,void>::typetestFunction(Ta,Ub){std::cout但是,类似的可变参数模板无法编译:templatetypenamestd::enable_if::value,void>::typetestFunction(Ta,U...bs){std::couttypenamestd::enable_if::value,void>:

c++ - 如何在转换运算符中使用 std::enable_if?

基本上我希望我的范围类型可以从Range隐式转换至Range.std::enable_if似乎是不可能的,因为该函数不带任何参数并且没有返回值。解决办法是什么?这基本上是我尝试过的:templateclassRange{T*begin_;T*end_;public:Range(T*begin,T*end):begin_{begin},end_{end}{}templateRange(T(&a)[N]):begin_{static_cast(&a[0])},end_{static_cast(&a[N-1])}{}T*Begin(){returnbegin_;}T*End(){return

c++ - 如何根据模板类型使用 std::enable_if 来启用或禁用构造函数?

我有以下模板化对象:templatestructresult{//Iwanttoenablethesetwoconstructorsonlyiftype_1!=type_2result(type_1f):foo{f}{}result(type_2b):bar{b}{}//Iwanttoenablethisconstructoronlyiftype_1==type_2result(type_1f,type_2b):foo{f},bar{b}{}//Othermemberfunctionsremoved.type_1foo;type_2bar;};如何使用std::enable_if根据需

c++ - 如何实现类似 std::copy_if 但在插入到不同容器之前应用函数的方法

完全公开,这可能是一个锤子和钉子的情况,在不需要的时候尝试使用STL算法。我在我正在使用的一些C++14代码中看到了一个重新出现的模式。我们有一个迭代的容器,如果当前元素符合某些条件,那么我们将其中一个元素字段复制到另一个容器。模式是这样的:for(autoit=std::begin(foo);it!=std::end(foo);++it){autox=it->Some_member;//Note,thecheckusuallyusesthefieldwouldaddtothenewcontainer.if(f(x)&&g(x)){bar.emplace_back(x);}}这个想法几

c++ - 是否编译了带有 if(this==NULL) 测试的类函数?

我在我们的实验中看到了这段代码片段,它实际上是在MSVC2008和G++中编译的。voidLinkList::Insert(Tn){if(this==NULL)//somecodehere}据我所知,this不能为null,因为如果未实例化,则不能在C++中调用类函数。这是一个有效的代码吗?如果是这样,背后的原因是什么?它可以用在什么地方? 最佳答案 sinceyoucannotcallaclassfunctionsinc++ifitwasn'tinstantiated问题是,你可以,但它leadstoundefinedbehavi

c++ - --enable-pic 在 Visual Studio 中等效

在VisualStudioC++项目中什么设置等同于*nix--enable-pic开关,即./configure--enable-pic 最佳答案 没有,因为不需要。http://en.wikipedia.org/wiki/Position-independent_code:“MicrosoftWindowsDLL不是Unix意义上的共享库,并且不使用与位置无关的代码” 关于c++---enable-pic在VisualStudio中等效,我们在StackOverflow上找到一个类似

c++ - enable_if 添加具有默认参数的函数参数?

我无法理解呈现的第二种情况here.它说:•Scenario2:Addingafunctionparameterthathasadefaultargument:templateyour_return_type_if_presentyourfunction(args,enable_if_t=BAR){//...}Scenario2leavestheparameterunnamed.Youcouldsay::typeDummy=BAR,butthenameDummyisirrelevant,andgivingitanameislikelytotriggeranunreferencedpar