草庐IT

c++ - boost::enable_if 类模板方法

我得到了带有模板方法的类:structundefined{};templatestructis_undefined:mpl::false_{};templatestructis_undefined:mpl::true_{};templatestructfoo{templatetypenameboost::disable_if>::typeapply(constF&f,constV&variables){}templatetypenameboost::enable_if>::typeapply(constF&f,constV&variables){}};显然,两个模板都被实例化,导致编译

c++ - 为什么 std::find_if(first, last, p) 不通过引用获取谓词?

我正在查看std::find_ifoncppreference.com,的各种签名我注意到采用谓词函数的flavors似乎按值接受它:templateInputItfind_if(InputItfirst,InputItlast,UnaryPredicatep);如果我理解正确的话,具有捕获变量的lambda会为其数据的引用或拷贝分配存储空间,因此“按值传递”可能意味着为调用复制了捕获数据的拷贝。另一方面,对于函数指针等可直接寻址的东西,如果直接传递函数指针,性能应该会更好,而不是通过引用到指针(pointer-to-pointer)。首先,这是正确的吗?上面的UnaryPredica

c++ - std::remove_if 来自 std::vector 的多态 std::unique_ptr

我有一个包含三个类的层次结构,其中Derived源自Selectable和Drawable.然后我有一个std::vector的std::unique_ptr我用Derived填充对象。我确定该vector将仅由同时从两个基派生的对象填充。当我尝试使用指向Selected的指针从vector中删除某个元素时,问题就来了.#include#include#includestructSelectable{virtual~Selectable()=0;};Selectable::~Selectable()=default;structDrawable{virtual~Drawable()=0

c++ - 我可以在定义中使用三元运算符来反对使用 if 吗?

假设我定义了一个宏,并且我在ifelse语句中使用该宏#include#defineLOG(x){if(x)std::cout现在这是一个棘手的案例,我意识到根据缩进的不同,对于“if”和“else”应该放在哪个方面可能存在一些歧义。我想到了这个想法(some_condition)?dosomething():true;这解决了问题,但我不确定拥有真实陈述的影响是什么。这是一个好的解决方案,还是有更好的方法?编辑:这是我使用的代码,它不起作用。看看能不能解决这个问题? 最佳答案 你应该这样定义你的宏:#defineLOG(X)do{

C++ : cout with a terenary if-statement

我得到这个错误:“错误:没有上下文类型信息的重载函数”。cout我正在做的事情可行吗?我只是做错了,还是我必须重载 最佳答案 它不会那样工作(即使你修复了优先级错误)。这里有两个问题,第二个比第一个更严重。第一个问题是std::endl是一个模板。它是一个函数模板。模板必须是专门的。为了专门化该模板,编译器必须知道(推断)模板参数。当你做的时候std::coutoperator期望的特定函数指针类型是编译器用来弄清楚如何专门化std::endl的东西模板。但是在您的示例中,您基本上“分离”了std::endl来自operator通过

c++ - 使用 constexpr 函数作为参数时,enable_if 在 Visual Studio 中不起作用

我目前正在研究VisualStudio2017(如果有任何帮助,请使用/std:c++latest进行编译)。有问题的代码只是根据一些模板化constexpr函数的结果选择结构特化。GCC和clang编译它没有问题。这是我的MCVE:#includestructA{enum{test_trait=true};};templateconstexprintchoose(){returnT::test_trait;}templatestructChosen;templatestructChosen()==1>>{};voidfoo(){//Thisworksconstexprintchose

c++ - if constexpr 的假分支未在模板化 lambda 中丢弃

我对模板化lambda中的“ifconstexpr”有疑问。为了争论起见,让我们忽略我是如何到达那里的,但我有一个以某种方式定义的结构foo,结果如下:templatestructfoo{inta;//Onlycontainsbifconditionistrueintb;}现在我可以定义一个模板函数thtemplatetemplatevoidprint_fun(foo&obj){/*Dosomethingwithobj.a*/ifconstexpr(condition)/*Dosomethingwithobj.b*/};如果foo的constexpr参数与print_fun的参数相同,

c++ - 开关盒 vs if else

这个问题在这里已经有了答案:Advantageofswitchoverif-elsestatement(23个回答)关闭9年前。我想知道下面的代码编译成汇编的方式是否有什么不同。我听说switch-case比ifelse更有效,但在这个例子中我不太确定情况是否如此。if(x==1){...}elseif(x==2){...}else{...}和switch(x){case1:...break;case2:...break;default:...}

c++ - shared_ptr 在 if 条件下如何工作

在C++中,我可以这样写:shared_ptra_sp=someFunctionReturningSharedPtr();if(a_sp){coutsomeData为什么if(a_sp)检查工作正常?a_sp不是bool值,但如何检查它是真还是假?if条件如何知道检查a_sp.get()函数的结果?或者,如果没有,如何检查a_sp的NULL性?shared_ptr中是否定义了一些将其转换为bool值的函数? 最佳答案 shared_ptr有一个operatorunspecified-bool-type()const允许它在bool上

c++ - 错误 : expected unqualified-id before 'if'

我用谷歌搜索了这个错误,直到脸色发青,但无法将任何结果与我的代码相关联。这个错误似乎通常是由错位或缺少大括号、parent等引起的。自从我编写任何C++以来也已经很长时间了,所以我可能遗漏了一些明显的、愚蠢的事情。这是我在QtCreator2.4.0中编写的QtMobile应用程序,基于Qt4.7.4(64位)构建于2011年12月20日11:14:33。#include#include#include#include#includeQFilefile("words.txt");QStringListwords;if(file.open(QIODevice::ReadOnly)){QT