草庐IT

BeanShell断言

全部标签

c++ - 我如何创建一个模板是特定类型的编译时断言?

我有一个模板函数,希望在编译时确保它不会在特定类的子类型或父类(superclass)型上实例化。如果违反此规定,我如何导致C++编译器错误?classbase{};classderived:publicbase{};classlowest:publicderived{};templateboolisCorrect(constT&obj){typedeffooD;foo*def=foo::find();return(def&&def->getAnswer(object));}我希望isCorrect仅适用于derived类,但不适用于base或lowest。请注意,可能有许多其他最低类

c++ - C++ 中的编译时断言?

我最近发现需要在C++中使用编译时断言来检查两种类型的大小是否相等。我在网上找到了下面的宏(据说来自Linux内核):#defineX_ASSERT(condition)((void)sizeof(char[1-2*!!(condition)]))我是这样使用的:X_ASSERT(sizeof(Botan::byte)!=sizeof(char));这让我很好奇-虽然这有效,但有没有更简洁的方法呢?(显然有不止一种方法,事实上)某些方法有优点还是缺点? 最佳答案 在C++0x中,有一个新的语言特性static_assert,它提供了

c++ - OpenCV 中的 accumulateWeighted 断言失败

我正在使用openCV并尝试计算背景的移动平均值,然后获取当前帧并减去背景以确定移动(某种)。但是,在运行程序时我得到:OpenCVError:Assertionfailed(func!=0)inaccumulateWeighted,file/home/sebbe/projekt/opencv/trunk/opencv/modules/imgproc/src/accum.cpp,line431terminatecalledafterthrowinganinstanceof'cv::Exception'what():/home/sebbe/projekt/opencv/trunk/ope

c++ - 有什么理由使用运行时断言而不是编译时断言吗?

在审查VisualC++代码库时,我发现了以下奇怪的事情。在可以在编译时评估条件的情况下使用运行时断言(检查条件并在违反条件时抛出异常):assert(sizeof(SomeType)==sizeof(SomeOtherType));很明显,编译器将评估条件并替换有效的代码assert(true);什么都不做或assert(false);每次控制通过该行时都会抛出异常。IMO应该使用编译时断言,原因如下:它会更早地暴露条件违规-在编译时-并且它将发出更干净(因此更快更小)的机器代码看起来编译时断言是唯一正确的事情。是否有任何可能的理由在这里更喜欢运行时断言?

c++ - 为什么断言宏仅用于调试构建

为什么让assert宏只在调试配置中做一些有用的事情是一种常见的做法?如果它的存在是为了测试不变量和检测编码错误,那么继续在生产软件中实现同样的大繁荣不是更容易吗?我有一些S60背景并且存在__ASSERT_ALWAYS和__ASSERT_DEBUG,后者等同于assert。 最佳答案 断言是为那些应该永远不会发生的事情而创建的,即如果它发生了,那么你的代码中就有一个你需要修复的错误。发布是“应该”没有错误的构建,并且使用断言为用户杀死应用程序与任何其他错误行为一样糟糕。 关于c++-为

c++ - opencv断言(一般)

一些(大部分)opencv错误是在运行时发现的——使用CV_64而不是CV_32,访问超出范围等。这使得调试不是一件容易的事,至少当你因为各种原因不能使用Debug模式时..发生错误时,opencv会停止断言(CV::ASSERT宏)并告诉它发生在opencv源代码中的确切位置。有没有办法告诉调用代码(我的代码)中错误发生的位置?当然假设我们处于Release模式(没有断点-只有控制台输出)谢谢 最佳答案 是的,通常很容易判断OpenCV何时失败:您需要做的就是检查每个函数调用的返回值,并在失败时打印错误消息发生。

c++ - 等待 QMutex 断言

我发现即使是对QMutex的简单等待也会导致断言。我可能做错了什么?QMutexmutex;SyncMgr::SyncMgr(QObject*parent):QObject(parent){moveToThread(&thread);thread.start();process=newQProcess(this);connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(onReadyReadStandardOutput()));connect(process,SIGNAL(readyReadStandardError())

c++ - Boost协程断言失败

为了在boost中尝试新的协程功能,我创建了以下程序:#include#include#includetypedefboost::coroutines::coroutinecoroutine_t;voidf(coroutine_t::caller_type&ca){std::vectorvec={1,2,3};for(inti:vec){charc=ca.get();std::cout代码基于samplecodefromthedocs.我的构建命令如下:$g++-std=c++11-otest-I/usr/local/include-L/usr/local/libmain.cpp/us

Mockito:断言期望是真的,但给出了错误

似乎当两者都f.isColored()&&fm.isColored()合在一起返回false,但是如果我单独使用它们,则方法正确返回正确。此方法0不会通过测试@OverridepublicbooleancolorConstraint(ActionSpaceas,FamilyMemberfm){for(FamilyMemberf:as.getFamilyMembers()){if(true&&f.isColored()&&fm.isColored())//thisdoesnotworkreturnfalse;}returntrue;}测试通过此方法1@Overridepublicbooleanc

c++ - 是否有可能确定/断言,如果一个虚函数被覆盖,另一个虚函数也被覆盖?

我有一个声明虚方法并定义默认实现的现有类。现在我想用differend参数重载该方法并提供默认实现。此外,我想强制执行约束,即如果第一个方法被子类覆盖,那么第二个(重载的)虚拟方法也必须被覆盖。在C++中这甚至可能吗?如果可以,是否可以在编译时实现?示例代码:classParamA{};classParamB{};classBase{public:virtualvoidmethod(ParamAa){//defaultbehavior}virtualvoidmethod(ParamBb){//defaultbehavior}}classDerived:publicBase{public