草庐IT

c++ - 如果为 false,则 std::is_member_function_pointer 不编译

我在寻找什么:我有一个模板化类,如果该类具有所需的函数,我想调用一个函数,例如:templatedo_something(){ifconstexpr(std::is_member_function_pointer::value){this->_t->x();//_tistypeofT*}}会发生什么:如果T没有带来函数,编译器就不会编译。小例子:#include#includeclassFoo{public:voidx(){}};classBar{};intmain(){std::cout::value::value编译器说:is_member_function_pointer.cpp

c++ - 返回不可复制对象的元组

考虑以下几点:#include#include#include#includeconstautolength_of_file=[](auto&file){file.seekg(0,std::ios::end);std::streamposlength=file.tellg();file.seekg(0,std::ios::beg);returnlength;};intmain(int,char*[]){constautocheck_and_read=[](constauto&filename){std::ifstreamfile(filename,std::ios::binary);f

c++ - 如何在不调整大小的情况下从 std::vector 中删除元素

iteratorerase(iteratorposition);iteratorerase(iteratorfirst,iteratorlast);EraseelementsRemovesfromthevectorcontainereitherasingleelement(position)orarangeofelements([first,last)).Thiseffectivelyreducesthevectorsizebythenumberofelementsremoved,callingeachelement'sdestructorbefore.和:removeRemovesa

c++ - std::vector 插入对象的拷贝或引用?

假设我有一个动态分配的对象。如果我将其放入STLvector中,是否会将引用插入vector或该对象的拷贝中?这是一个普遍的问题。例如:classvec{vectorvec;voidaddToVec(obja){//insertaintovec}.........}obj*a=newobj;vec*v=newvec;vec.addToVec(a);如果我删除v,是否也会反对骰子? 最佳答案 willareferencebeinsertedintothevectororacopyofthisobject?复制(这意味着您的class应

c++ - bind 不是 std 的成员

我正在使用带有minwg编译器的netbeans7.2.1。尝试构建应用程序时收到以下错误消息:error:'function'innamespace'std'doesnotnameatypeerror:'bind'isnotamemberof'std'尽管我在文件的开头包含了functional.h,并且我正在使用以下形式的“函数”和“绑定(bind)”:std::function和std::bind问题出在哪里?它在编译器中还是缺少某些东西?我记得我在visualstudio2010上成功编译并运行了相同的应用程序。 最佳答案

c++ - std::move 在类模板中的构造函数初始值设定项列表中

我有一个这样的模板:templatestructfoo{Tm_t;foo(Tt):m_t(t){}};问题是我想为T支持小型/常规类型和大型类型(如矩阵)。你推荐我这样写构造函数初始化列表吗foo(Tt):m_t(std::move(t)){}并要求T类型始终支持move构造,即使对于较小的类型也是如此?有没有更好的方法? 最佳答案 andrequirethatthetypeTalwayssupportmoveconstruction,evenforsmallertypes?任何可复制构造的类型也可move构造。在这些情况下move

c++ - 使用 'auto' 和 std::minmax 观察奇怪的行为

我在SUSEEnterpriseLinux11上使用GCC4.7.2和Boost1.58.0。我有以下代码片段,它基本上通过多边形列表来计算它们的长度/宽度。在std::minmax函数中使用“auto”关键字时,我看到了奇怪的输出。为了进行比较,我还声明了第二个变量,其中明确声明了类型(即dim与dim1)。namespacegtl=boost::polygon;typedefgtl::polygon_90_dataLayoutPolygon;typedefgtl::rectangle_dataLayoutRectangle;staticLayoutFeatureVeccalc_st

c++ - 可变参数模板和 std::bind

给定以下模板化函数,我如何更改它以利用可变参数模板?也就是说,用可变参数代替P1和P2来代替std::bind占位符?目前我每个元数都有这些函数之一,零元数没有P参数,直到元数9有P1到P9参数。如果可能的话,我希望将其合并为一个函数。templatevoidAttach(R(T::*f)(P1,P2),Up){AttachInternal(p,std::bind(f,p.get(),std::placeholders::_1,std::placeholders::_2));} 最佳答案 您可以(部分)专攻std::is_place

c++ - std::map emplace/insert 正在插入的移动值

目前我正在阅读C++1y论文,现在我正在尝试理解标题为Improvedinsertioninterfaceforunique-keymaps的n3873论文.该论文指出insert和emplace方法存在问题,它通过以下示例说明了该问题:std::map>m;m["foo"];std::unique_ptrp(newFoo);autores=m.emplace("foo",std::move(p));在上面的代码之后,它表达了以下内容:Whatisthevalueofp?Itiscurrentlyunspecifiedwhetherphasbeenmoved-from.(Theansw

c++ - 如何静态检查模板的类型 T 是否为 std::vector<U>,其中 U 为 float、double 或 integral

我如何检查参数包中的参数是否具有float中的任一类型?,double,integral,或std::vector其中的?例如T={int,long,std::vector}很好,同时T={int,long,std::vector}不是,因为我们不允许std::vector属于longdouble类型。我已经走到这一步了templatevoidfoo(T...t){static_assert(std::is_same::value||std::is_same::value||std::is_integral::value/*||std::is_same,T>::value?*/,"un