草庐IT

move_function_imp

全部标签

c++ - vector move 构造函数比复制构造函数慢

我正在开发我的第一个C++项目,它是一个CSV解析器(fullsourcecodehere)。它正处于工作状态,现在我想进行基本的重构/提高性能。目前解析器的工作方式是将每一行作为std::vector返回,我想与其每次都分配一个新的vector和一个新的字符串,不如我有一个内部vector和一个带有保留内存的内部字符串,我会一次又一次地清除。这行得通,我开始查看其他可能进行内存分配的地方,我看到了这个复制内部vector然后清除它的函数:autoadd_row()->std::vector{autorow(m_bufvec);m_bufvec.clear();returnrow;}我

采用依赖于模板参数的 std::function 的 C++11 模板函数

我正在尝试编写一个接受依赖于模板参数的std::function的模板函数。不幸的是,编译器无法正确推导出std::function的参数。这里有一些简单的示例代码:#include#includeusingnamespacestd;voidDoSomething(unsignedident,unsignedparam){coutvoidCallFunc(Identident,Paramparam,std::functionop){op(ident,param);}intmain(){unsignedid(1);unsignedparam(1);//Thefollowingfailst

c++ - 未定义对 'function' 的引用——链接器问题?

我目前正在尝试在Linux终端上编译和链接我的C++文件。我运行的命令是:g++-ogameplaygamePlay.cppplayer.cppmain.cppdisplay.cpp-lcurses该命令似乎可以完美地编译所有内容,但是一旦它尝试链接内容,我就会遇到2个错误。undefinedreferenceto'gamePlay::deal(std::vector>,std::vector>)'undefinedreferenceto'gamePlay::score(player)'下面是我的gamePlay.CPP文件。我真的迷路了,非常感谢任何帮助!#include"gameP

c++ - 为什么我可以 std::move 流右值引用到左值引用?

据我了解C++11引用,我不应该能够将右值引用绑定(bind)到(非常量)左值引用,因为前者可能绑定(bind)到临时对象,而后者绝不能绑定(bind)到一个临时的。但是我发现这种奇怪的行为与临时流对象有关(我尽可能地减少了)structDummy{};templateStream&operatorvoidpass(Stream&&s){std::move(s)lvalueconversion?}#includeintmain(){pass(std::fstream("test",std::ios::out));}如果我写s在线(X),C++在(A)行提示,说error:invalid

c++ - std::reverse_copy "error: function call has aggregate value"

#include#include#include#includeusingnamespacestd;intmain(){intarrA[]={1,2,3,4,5,6,7,8,9};vectorvecIntA(arrA,arrA+sizeof(arrA)/sizeof(arrA[0]));vectorvecIntB(vecIntA.size());//copy((vecIntA.rbegin()+3).base(),(vecIntA.rbegin()+1).base(),vecIntB.begin());//OKvector::iterators=(vecIntA.rbegin()+3)

c++ - 检查 C++11 中返回的 std::function 是否为 "valid"

我想像这样实现一个动态任务队列:typedefstd::functionJob;typedefstd::functionJobGenerator;//..JobGeneratorgen=...;autojob=gen();while(IsValidFunction(job)){job();}如何实现IsValidFunction?std::function是否有某种默认值可供检查? 最佳答案 您可以简单地检查job作为一个bool值:while(autojob=gen()){job();}这是一种简写形式,它赋值job来自gen()

c++ - 将函数分配给 std::function 类型时调用哪个函数原型(prototype)(以及如何调用)?

我有密码voidprints_one(){coutfoo;foo=prints_one;foo();return0;}它按预期工作;它打印“一个”。我不知道在赋值中调用了哪个赋值运算符原型(prototype)以及如何调用。看cppreference,好像就是这个函数templatefunction&operator=(Fn&&fn);但如果这是被调用的原型(prototype),我不明白函数如何绑定(bind)到右值引用。谢谢!更新:谢谢大家,我会阅读通用引用资料。关于40two的回答;此代码打印它是一个右值引用:templateclassFoo{public:Foo(){}Foo&

c++ - 虚拟重载与 `std::function` 成员?

我现在有一个类,我们称之为Generic.这个类有成员和属性,我打算在std::vector中使用它或类似的,处理这个类的几个实例。另外,我想特化这个类,通用对象和特化对象之间的唯一区别是一个私有(private)方法,它不访问类的任何成员(但被其他方法调用)。我的第一个想法是简单地声明它virtual并像这样在专门的类中重载它:classGeneric{//allothermembersandattributesprivate:virtualfloatspecialFunc(floatx)const=0;};classSpecialized_one:publicGeneric{pri

c++ - 使用 std::function 包装函数对象

谁能帮我理解为什么下面的代码会导致错误?classA{public:float&operator()(){return_f;}private:float_f=1;}a;auto&foo(){std::functionfunc=a;returnfunc();}intmain(){std::cout错误:error:non-constlvaluereferencetotype'float'cannotbindtoatemporaryoftype'float'returnfunc();^~~~~~1errorgenerated.在这里,在operator()中,我返回了对_f的引用,因此,我

c++ - 使类不可 move 的用例(如果有)是什么?

考虑一种使类不可复制的经典方法://similartoboost::noncopyableclassnoncopyable{protected:constexprnoncopyable()=default;noncopyable(constnoncopyable&)=delete;noncopyable&operator=(constnoncopyable&)=delete;};classc:privatenoncopyable{/*...*/};由于声明任何复制操作会阻止自动生成move操作,这会自动使所有派生类(默认情况下)也不可move(因此noncopyable的全名将是non