草庐IT

c++ - C++中的多态迭代器

我正在尝试在C++中实现多态迭代器。基本上,我需要它才能应用过滤器,以便迭代器根据相关条件跳过一些项目。所以我做了一个GoF-like具有抽象接口(interface)的迭代器,这允许我从中派生过滤迭代器并实现所需的逻辑。我也更喜欢基于接口(interface)的迭代器而不是模板迭代器,因为它们允许隐藏实现而不会导致困惑的鸭子类型模板。但是,多态迭代器不能按值返回(与STL迭代器相反),所以我必须传递指针,这很容易变得危险,就像在这种情况下一样,这看起来合乎逻辑但会导致内存泄漏:Iter*Collection::GetIter(){...}//newIterImplDoSomethin

c++ - 多态QSharedPointer

我正在尝试在我的多态结构中使用QSharedPointer,但我找不到将基类指针转换为派生类指针的正确语法。structSwitch:State{inta;};QSharedPointermyState=QSharedPointer(newSwitch);QSharedPointermySwitchTest=???myState;我应该用什么代替??? 最佳答案 使用qSharedPointerCast():QSharedPointermySwitchTest=qSharedPointerCast(myState);或调用stati

c++ - 多态QSharedPointer

我正在尝试在我的多态结构中使用QSharedPointer,但我找不到将基类指针转换为派生类指针的正确语法。structSwitch:State{inta;};QSharedPointermyState=QSharedPointer(newSwitch);QSharedPointermySwitchTest=???myState;我应该用什么代替??? 最佳答案 使用qSharedPointerCast():QSharedPointermySwitchTest=qSharedPointerCast(myState);或调用stati

c++ - 为什么多态性不适用于 C++ 中的数组?

这个问题在这里已经有了答案:C++new[]intobaseclasspointercrashonarrayaccess(5个回答)关闭5年前。#includeusingnamespacestd;structBase{virtual~Base(){cout输出如下:(VisualStudio2015withClang3.8)~Base():1~Base():2~Base():-2071674928~Base():1为什么多态性不适用于C++中的数组? 最佳答案 给定,Base*p=Derived[4];C++11标准制定delete

c++ - 为什么多态性不适用于 C++ 中的数组?

这个问题在这里已经有了答案:C++new[]intobaseclasspointercrashonarrayaccess(5个回答)关闭5年前。#includeusingnamespacestd;structBase{virtual~Base(){cout输出如下:(VisualStudio2015withClang3.8)~Base():1~Base():2~Base():-2071674928~Base():1为什么多态性不适用于C++中的数组? 最佳答案 给定,Base*p=Derived[4];C++11标准制定delete

c++ - 拥有多态对象集合的首选 C++ 习惯用法是什么?

考虑以下类classBase{public:virtualvoiddo_stuff()=0;};classDerived:publicBase{publicvirtualvoiddo_stuff(){std::cout现在假设我想让另一个类负责拥有Base的对象的派生类型并遍历它们调用它们的do_stuff()方法。看起来是这样的,但是不知道是什么T应该声明为classOwner{public:voiddo_all_stuff(){//iteratethroughallitemsandcalldo_stuff()onthem}voidadd_item(Titem){items.push

c++ - 拥有多态对象集合的首选 C++ 习惯用法是什么?

考虑以下类classBase{public:virtualvoiddo_stuff()=0;};classDerived:publicBase{publicvirtualvoiddo_stuff(){std::cout现在假设我想让另一个类负责拥有Base的对象的派生类型并遍历它们调用它们的do_stuff()方法。看起来是这样的,但是不知道是什么T应该声明为classOwner{public:voiddo_all_stuff(){//iteratethroughallitemsandcalldo_stuff()onthem}voidadd_item(Titem){items.push

c++ - 向下转型是否会破坏多态性的目的?

今天遇到一个问题,foundhere,这为我提出了这个问题。这是我所了解的伪代码示例:classCar{public:virtualintgoFast()=0;};classFordFocus:publicCar{public:intgoFast(){return35;};};classLamborghini:publicCar{boolroof;public:intgoFast(){return-1/0;//crash};voidretractTheRoof(){roof=0;};};classRichGuy{vectorcars;public:voidgoDrive(){for(i

c++ - 向下转型是否会破坏多态性的目的?

今天遇到一个问题,foundhere,这为我提出了这个问题。这是我所了解的伪代码示例:classCar{public:virtualintgoFast()=0;};classFordFocus:publicCar{public:intgoFast(){return35;};};classLamborghini:publicCar{boolroof;public:intgoFast(){return-1/0;//crash};voidretractTheRoof(){roof=0;};};classRichGuy{vectorcars;public:voidgoDrive(){for(i

c++ - 可以在多态 lambda 中使用结构化绑定(bind)语法吗

结构化绑定(bind)使得通过如下基于范围的for循环遍历map更加简洁和可读for(auto[key,value]:map){cout但是结构化绑定(bind)可以在如下lambda表达式中使用吗?std::for_each(map.begin(),map.end(),[](auto[key,value]){cout从看起来上面的代码不能与我在这里找到的在线C++编译器一起工作https://wandbox.org/permlink/sS6r7JZTB3G3hr78.如果它不起作用,那么是否有充分的理由不支持上述内容?还是只是尚未提出的东西?模板只会在使用时被实例化,因此结构化绑定(