草庐IT

c++ - 在 C++11 中将 std::function/mem_fn 与成员函数一起使用

长话短说,是否有一种简单/定义的方式来以流线型方式处理函数对象/lambda和成员函数?如果我理解正确,如果我使用std::mem_fn,我需要将正确类型的对象传递给函数调用,即Objecto;ftncallstd::mem_fun(&Object::function);ftncall(o);理想情况下,会有一些方法可以将o“附加”到该函数对象,也许作为std::weak_ptr,这样我们就知道o是否被删除了。例如,如果有一种方法可以像这样模糊地做一些事情:Objecto;ftncallstd::mem_fn(&Object::function,o);//Ormaybestd::mem

c++ - 为什么在 C++11 中需要 decltype?

我正在学习C++11中的decltype。auto和decltype的功能似乎是重复的,我不明白为什么我们需要decltype。根据wiki,它的主要用途是在泛型编程中,在这种编程中通常很难甚至不可能表达依赖于模板参数的类型。在泛型编程中,当难以表达类型时,我可以使用auto:templatevoidMakeAnObject(constT&builder){autoval=builder.MakeObject();//dostuffwithval}我不明白为什么需要decltype。decltype可以做一些auto做不到的事情吗? 最佳答案

c++ - std::ofstream == NULL 不会为 -std=gnu++11 编译,任何解决方法?

考虑以下代码:std::ostreamfile;if(file==NULL)std::cout它在通过-std=gnu11(GCC5.2的默认值)或仅使用时完美编译gcccode.cpp-oa.out.不过,-std=gnu++11失败了:nomatchfor‘operator==’(operandtypesare‘std::ofstream{akastd::basic_ofstream}’and‘longint’)`最简单的解决方法是什么?详细信息:我必须使用std=gnu++11才能访问shared_ptr定义。此外,我的一些代码是自动生成的,修改生成器会付出合理的努力-所以我想知

c++ - C++11 是否支持模板中的类型递归?

我想详细解释一下这个问题。在许多具有强类型系统的语言(如Felix、Ocaml、Haskell)中,您可以通过组合类型构造函数来定义多态列表。这是Felix的定义:typedeflist[T]=1+T*list[T];typedeflist[T]=(1+T*self)asself;在Ocaml中:type'alist=Empty|Cons('a,'alist)在C中,这是递归的,但既不是多态的也不是组合的:structint_list{intelt;structint_list*next;};在C++中,如果C++支持类型递归,它会像这样完成:structunit{};template

c++ - 我可以在从另一个线程插入/删除时访问 C++11 std::map 条目吗?

我可以在另一个线程插入/删除条目时访问(不锁定)std::map条目吗?示例伪C++:typedefstruct{intvalue;intstuff;}some_type_t;std::mapmy_map;//thread1does:my_map.at('a')->value=1;//thread2does:some_type_t*stuff=my_map.at('b');//thread3does:my_map.erase('c');//I'mnotmodifyinganyelementsTisapointertoanpreviouslyallocated"some_type_t"s

C++ 11 vector 构造函数复制与范围?

我无法理解vector复制构造函数和范围构造函数的优点或区别。当我像这样构造三个vector时:vectorFirstVec(3,911);//fillconstructorvectorSecondVec(FirstVec.begin(),FirstVec.end());//rangeconstructorvectorThirdVec(FirstVec);//copyconstructorSecondVec和ThirdVec的内容完全一样。在任何情况下使用其中之一有优势吗?谢谢。 最佳答案 当您想要复制不同类型容器的项目,或者不想复

c++ - 在 C++11/14 中说 "foo not in {bar, baz}"的漂亮方式

我正在编写C++,但缺少Python的清晰度。但我知道C++一直在发展,我想知道是否有更好的方法来做这样的事情:if(foo!=bar&&foo!=baz)在Python中我会这样做:iffoonotin{bar,baz}:C++11或C++14中是否有一个奇特的特性允许我做一些类似可读的事情?编辑:很多人想知道为什么我要尝试替换这么短的东西。我不是,但我不想让我的示例像原始代码一样丑陋和不可读。它更像是:if(somelongvariablename.somelongmethodname()!=SomeReallyLongNamespace::AndAnotherSubClassna

win11 使用windows自带的Linux(Ubuntu)教程

1.去windows商店下载windows自己带的Ubuntu1.下载完成之后可能遇到的问题提示你的WSL版本过低的问题,我这里已经下载过了,就不演示了。不过还是建议在下载完Ubuntu之后去下面这个网址更新wsl版本解决:去微软官网下载最新的wsl版本:旧版WSL的手动安装步骤|MicrosoftLearn  尚未安装wsl解决:在搜索查找WindowsPowerShell用管理员的方式打开然后输入如下指令:Enable-WindowsOptionalFeature-Online-FeatureNameMicrosoft-Windows-Subsystem-Linux  等待其安装完成2.控

c++ - xcode - "attempt to use a deleted function"- 这是什么意思?

我正在Xcode4.2中编写C++库。我的一个类无法编译并出现此错误:attempttouseadeletedfunction没有具体说明它在谈论什么功能。我不想在这里发布类代码,但是有人知道这个错误是什么意思吗? 最佳答案 我对线程(C++11)有类似的消息。结果是我向线程调用的函数传递了错误数量的参数,因此线程找不到任何合适的函数并给出了该消息。 关于c++-xcode-"attempttouseadeletedfunction"-这是什么意思?,我们在StackOverflow上找

c++ - C++11 中的 auto 关键字奇怪行为

只是理论问题-为什么我不能写这样的代码:autoautofoo=0;第一个auto关键字-存储类说明符(是的,我知道它在C++11中没有用且已弃用),第二个auto关键字-auto类型说明符。怎么了?再一次-我真的不想在实际代码中使用它。 最佳答案 auto存储类说明符并非“在C++11中无用且已弃用”,它已被完全删除。auto关键字不再是存储类说明符,不能用作一个说明符。在C++11中,auto是一个简单的类型说明符。 关于c++-C++11中的auto关键字奇怪行为,我们在Stack