草庐IT

C++ 区分 Functor 和 Value 模板参数

一般来说,我在理解仿函数时遇到了一些困难,因为我对模板编程还很陌生。我在这里试图完成的是以下内容,我试图拥有一个采用Functor的函数和一个采用值的重载函数。理想情况下:templateintfunction(ValueTypev){v+1;...}templateintfunction(Functorf){f();...}我会接受像将std::function作为参数这样的东西来降低性能,但我特别希望能够将lambda作为参数。编辑我想要实现的是允许我正在构建的构造在必要时进行延迟评估:construct.option(1)construct.option([](){return5

c++ - 如何区分 POD 和用户定义的数据类型?

首先:int*p=newint;第二:classA{};A*pa=newA;new和编译器如何确定何时调用构造函数?在第一种情况下,编译器不生成代码来调用p的构造函数,而在第二种情况下,它生成代码来调用A的构造函数。使用哪种机制来做出这样的选择? 最佳答案 编译器知道A是一个类,因为它看到了类的声明,所以它使用合成的默认构造函数。它知道int是int,因为语言语法说它是。 关于c++-如何区分POD和用户定义的数据类型?,我们在StackOverflow上找到一个类似的问题:

传递 const 数组时 C++ 错误区分特化

考虑代码templateclassB;templateclassB{};templateclassB{};templateclassB{};templateclassB{};以下模板实例化工作正常:AAA但下面的不起作用:A是否有某种原因导致此特定组合无效,或者它可能是g++4.6.3的错误?顺便说一句,我设法使用SFINAE和boost::disable_if解决了这个问题,所以至少问题解决了。编辑我忘了提到有问题的错误是一个模棱两可的类模板实例化,它无法决定是对const的重载还是对数组的重载。EDIT2这与指针无关,这里是完整的上下文:我正在阅读C++TemplateMetapr

c++ - 使用 std::istream::operator>> 处理无符号类型,我如何区分下溢提取失败?

我想使用std::istream::operator>>将数据提取为无符号类型(在模板内,因此它可以是ushort、uint等)。具体来说,我使用std::stringstream来解析通过std::getline()调用从文件中提取的std::string行。因为我正在从文件中读取数据,所以这些提取可能会因不同的原因而失败:下溢、溢出和“提取不当”。这种情况由STL处理:Ifextractionfails,zeroiswrittentovalueandfailbitisset.Ifextractionresultsinthevaluetoolargeortoosmalltofitin

c++ - 区分 typedef

我正在为C库编写C++抽象。C库有几个用于标识远程资源的ID的类型定义:typedefintcolor_id;typedefintsmell_id;typedefintflavor_id;//...color_idcreateColor(connection*);voiddestroyColor(connection*,color_id);//...所有这些typedef在编译器眼中当然是同一类型。这对我来说是个问题,因为我想重载函数并专门化模板以提供一个很好的C++友好API://can'tdothefollowingsince`color_id`,`smell_id`and`int

c++ - STL find_if 和不区分大小写的字符串比较

我有一个Models的vector,如下所示:structModel{std::stringmName;//.......};给定一个表示模型名称的字符串,我想看看是否可以在vector中找到其中一个模型。现在我有这个:std::stringassetName="monkey";std::vector::iteratoriter=std::find_if(mModels.begin(),mModels.end(),boost::bind(&Model::mName,_1)==assetName);但是这不会进行不区分大小写的字符串比较。所以我阅读了有关boost/algorithm/s

c++ - 区分 boost::bind 中具有相同名称的 const 和非常量方法

例如,当我将boost::bind与一个既声明为const又声明为非const的方法名称一起使用时,我遇到了不明确的错误,例如boost::bind(&boost::optional::get,_1)我该如何解决这个问题? 最佳答案 问题和解决方法在Boost.Bind的常见问题解答部分进行了描述引用。您还可以使用如下实用函数:#include#includetemplateRet(Obj::*const_getter(Ret(Obj::*p)()const))()const{returnp;}templateRet(Obj::*n

c++ - 区分同一类型的多个异常

我不太清楚用户将如何区分我的函数可能抛出的异常。我的一个函数可以抛出std::invalid_argument的两个实例.例如,在构造函数中:#include//std::invalid_argument#includeclassFoo{public:voidFoo(inthour,intminute):h(hour),m(minute){if(hour23)throwstd::invalid_argument(std::string("..."));if(minute59)throwstd::invalid_argument(std::string("..."));}}注意:是一个例

ios - 如何区分单击手势和双击手势?

我将单击和双击手势添加到一个UIImageView,然后问题是每次我尝试双击时,它都会执行单击的UITapGestureRecognizer首先。我怎样才能摆脱这个问题? 最佳答案 您可能需要requireGestureRecognizerToFail:方法。像这样:[singleTapRecognizerrequireGestureRecognizerToFail:doubleTapRecognizer]; 关于ios-如何区分单击手势和双击手势?,我们在StackOverflow上找

ios - Xamarin.Forms - 区分后台和前台 App Center 推送通知

我们正在使用AppCenter推送通知并根据以下文章https://learn.microsoft.com/en-us/appcenter/sdk/push/xamarin-forms,可以在App.xaml.cs中使用Push.PushNotificationReceived处理推送通知。这实际上是工作的ATM,该方法实际上是为后台和前台通知触发的。我们需要能够区分它们。每当用户点击通知(后台)时,我们都会将用户导航到应用的特定部分,如果应用已经打开(前台),我们将无法执行相同操作。我见过一些实现该目标的方法,但它们都是特定于平台(在本例中为iOS)的。有没有办法在PCL中做同样的事