草庐IT

exception-derived

全部标签

c++ - 为什么我不能在 Exception 类中有 auto_ptr

我在异常类中遇到了auto_ptr的问题,我最终将其简化为:#includeclassMyException{std::auto_ptrm_foo2;};intmain(){try{throwMyException();}catch(constMyException&){}return0;}编译失败:/perforce/unstable/test/Common/Exceptions/TestException4.cpp:Infunction'intmain()':/perforce/unstable/test/Common/Exceptions/TestException4.cpp:1

C++:我可以在函数调用期间将 vector <derived_class> 转换为 vector <base_class> 吗?

我有一个现有的类和函数,如下所示:Classbase_class{...}voidFunc(...,vector&vec_b,...){//insidethefunction,thevectorvec_bisbeingre-organizedandre-sized}我定义了一个派生类,如下所示:Classderived_class:publicbase_class{...}现在,不改变函数Func,我可以传递一个vector吗?进入Func,例如:voidmain(){vectord;Func(...,d,...);}派生类d经历同样的重组和重新调整规模?我知道我可以在函数调用中毫无问

C++ 访客模式 : Why should every derived visited implement Accept()?

我看过几个演示访问者模式的示例。在所有这些元素中,每个派生的访问元素都实现通常称为Accept()方法的方法。在颜色层次结构中,此方法可能如下所示:voidRed::accept(Visitor*v){v->visit(*this);}voidBlue::accept(Visitor*v){v->visit(*this);}当Visitor及其继承者具有以下方法时:visit(Redred);visit(Blueblue)我的问题是为什么不只在基类中以相同的方式实现它(在这个例子中:Color)多态性将完成这项工作,即正确的访问将被调用,因为什么时候对象是Redthis的动态类型是Re

c++ - 什么时候使用 uncaught_exception?

什么是uncaught_exception的好用例? 最佳答案 HerbSutter似乎给出了很好的建议here.他不知道它有什么好的用途,并说在某些情况下它看起来很有用,但实际上并没有用。 关于c++-什么时候使用uncaught_exception?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/275249/

c++ - 如何摆脱 "C++ exception specification ignored"警告

最近得到一个别人实现过的dll。我必须在我的应用程序中使用它。在他们类的头文件中,他们有函数声明voidfunc1()throw(CCustomException);现在当我编译它时收到警告,C++exceptionspecificationignoredexcepttoindicateafunctionisnot_declspec(nothrow)我读了MSDN-Documentation但无法清楚地理解它。另外,我不想仅仅因为它出现就禁用警告。我想知道我做错了什么而不是禁用它。我想我的函数,说myfunc()从dll访问那个func1()没有那个异常规范列表。因此,我也尝试在我的函

c++ - 从 Derived* 到 void* 到 Base* 的 static_cast

我想将指向派生类成员的指针转换为void*,然后从那里转换为基类的指针,如下例所示:#includeclassBase{public:voidfunction1(){std::cout(&d);Base*baseptr=static_cast(ptr);baseptr->function1();baseptr->function2();}这会编译并给出所需的结果(分别打印1和2),但它能保证工作吗?我在这里找到的static_cast的描述:http://en.cppreference.com/w/cpp/language/static_cast只提到转换为void*并返回到指向相同类

c++ - boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error>>

我需要一些帮助来解决这个异常,我正在实现一个NPAPI插件,以便能够使用来自浏览器扩展的本地套接字,为此我正在使用Firebreath框架。对于套接字和连接,我使用带有异步调用的Boostasio和一个包含5个工作线程的线程池。我还为每个线程设置了截止日期以实现传输超时。我使用插件的扩展工作流程是这样的:打开套接字1(这会启动async_receive和截止时间异步等待)写入套接字1获取响应1打开另一个socket2在套接字2中写入写套接字1关闭套接字1(socket.cancel(),deadline.cancel(),socket.shutdown(),socket发布)。获取响应

c++ - 如何使用 BOOST_THROW_EXCEPTION?

如何使用BOOST_THROW_EXCEPTION宏?什么作为参数?我不知道,我似乎找不到任何可读的例子。 最佳答案 您只需将一个异常对象传递给它:BOOST_THROW_EXCEPTION(std::range_error("Indexoutofrange"));它将包装异常以使其派生自类boost::exception(如果它还不是它的子级),并添加源文件和行等信息。Boost.ExceptionFAQ对优势和使用示例有很好的见解。 关于c++-如何使用BOOST_THROW_EXC

c++ - 为什么 sizeof Derived Class 是 8?

#includeusingnamespacestd;classEmpty{};classDerived:virtualpublicEmpty{charc;};intmain(){cout为什么size要来8我觉得应该是9,如果我将“c”声明为整数,那么它也将是8你能给我解释一下逻辑吗 最佳答案 大小依赖于实现,它取决于特定编译器实现如何实现虚拟化和填充。你不应该期望这个值是特定的东西。如果您想在程序中计算大小,只需使用sizeof即可。 关于c++-为什么sizeofDerivedCla

C++ 模板 : 'is not derived from type'

为什么这个代码无效?#includetemplateclassA{public:A(){v.clear();}std::vector*>::const_iteratorbegin(){returnv.begin();}private:std::vector*>v;};GCC报告以下错误:test.cpp:8:error:type'std::vector*,std::allocator*>>'isnotderivedfromtype'A'test.cpp:8:error:expected';'before'begin'test.cpp:12:error:expected`;'before