草庐IT

JNI_ASSERT

全部标签

c++ - 用于确保设计契约(Contract)的 static_assert

作为开发人员团队的一员,我想确保在我们发布的自定义迭代器上实现一组函数(和运算符)。使用STL迭代器类型作为基类型会有所帮助,但是由于某些原因(超出我的控制范围),我们决定不强制执行STL兼容性。迭代器由同一个团队和整个公司的人员使用。我想设计一个使用迭代器类型并根据设计契约进行测试的模板类。例如,我希望迭代器实现operator++、operator--并声明所需的typedef。1>是否可以实现这样一个强制设计契约的模板类?可能使用static_assert?2>如果是,这是一个好的设计吗?引用:customiterator 最佳答案

c++ - 充分利用 static_assert 和 std::is_invocable

我有一个包含多个函数对象的库,这些函数对象可能只接受几种类型,具体取决于std::is_integral.我要std::is_invocable在条件失败时返回false,但当用户尝试调用函数对象的实例时,我还想要一个不错的static_assert错误消息。这是我目前拥有的函数对象的一个​​简化示例:structfunction{templateautooperator()(Iteratorfirst,Iteratorlast)const->std::enable_if_t::value_type>>{/*something*/}};通过这样的实现,std::is_invocable

c++ - 如何正确重写 ASSERT 代码以在 msvc 中传递/分析?

VisualStudio为C/C++添加了代码分析(/analyze)以帮助识别错误代码。这是一个非常好的功能,但是当您处理旧项目时,您可能会被警告的数量弄得不知所措。大多数问题的产生是因为旧代码在方法或函数的开头执行一些断言。我认为这是代码中使用的ASSERT定义(来自afx.h)#defineASSERT(f)DEBUG_ONLY((void)((f)||!::AfxAssertFailedLine(THIS_FILE,__LINE__)||(AfxDebugBreak(),0)))示例代码:ASSERT(pBytes!=NULL);*pBytes=0;//我正在寻找一种简单、干净

java - JNI、垃圾收集和指针——Java/C++ 谁应该做什么?

我们在C++中有指针的概念。现在,如果我们在C++中分配一些内存并将其作为对象引用(使用JNI)传递给Java,那么谁应该释放它以及谁将释放它。会不会1.)垃圾收集器在Java中自动执行?2.)我们需要在包装的JNI类finalize方法中显式删除指针吗?3.)或者我们应该忘记finalize(因为finalizers不可信),Java负责调用C++代码来删除对象4.)或者是否有一些方法可以直接在Java本身中释放内存(不确定Java如何解释C++指针以删除它)?这样做的最佳实践是什么,反之亦然(当我们将对象从Java传递到C++时)? 最佳答案

java - 从 JNI/C++ 代码使用 java 套接字

我有一个java应用程序,它创建一个套接字来与服务器进程对话,例如newjava.net.Socket(Stringhost,intport)。这个应用程序包含一堆遗留的c++代码,需要从该服务器吸取大量数据并进行处理。目前这是通过让native代码创建自己的套接字并连接到服务器来实现的,例如:sock=socket(AF_INET,SOCK_STREAM,0);structhostent*hp=gethostbyname(host);if(!hp){unsignedlongaddr=inet_addr(host);hp=gethostbyaddr((char*)&addr,sizeo

c++ - Q_ASSERT 发布构建语义

我找不到关于发布版本下Q_ASSERT语义的明确声明。如果没有断言检查,那么是否对断言表达式进行求值?考虑以下代码Q_ASSERT(do_something_report_false_if_failed());do_something_report_false_if_failed()是否会在所有可能的Qt构建配置下运行?这样做会更安全吗(即使有点冗长且可读性较差):boolis_ok=do_something_report_false_if_failed();Q_ASSERT(is_ok)后一种方法的缺点是ASSERT失败不那么冗长,但它可能更清楚地表明语句已执行?

c++ - 什么时候应该使用 assert()?

在与许多开发人员一起开发一个大型C++编程项目时,我们遇到了在代码中不恰本地使用assert()的问题,这会导致断言确实发生并导致产品崩溃的质量不佳。问题是适用于正确使用assert()的好的原则是什么?什么时候使用assert()合适,什么时候不合适?是否有每个断言都应该通过的标准列表才能合法?我们如何鼓励正确使用assert()?作为对此的第一个破解,我会说assert()应该只用于记录被认为不可能达到的条件,并且应该在运行时将其标识为assert()失败出现是因为违反了编程假设。人们可以做得比这更好吗?您使用assert()的体验如何? 最佳答案

java - 如果调用 JNI DeleteGlobalRef(),相应的 java 对象是否会被垃圾回收?

我的意思是,如果我在C++中创建一个全局引用jobject,然后将其传递给一些Java代码,并删除调用DeleteGlobalRef(),那么底层Java对象可能会立即被垃圾回收,因此任何future已经引用该对象的Java代码可能会返回NullPointerException?具体来说,如果我有一些C++代码执行类似这个简化示例的操作:staticjobjectmyObjGlobalRef;staticJNIEnv*env=/*calltocreateaJVMandgettheJNIenv*/;jobjectReturnMyObj(){/*>*/jobjectlocalObj=env

c++ - 如何在 C++ 中将 static_assert 用于 constexpr 函数参数?

我的库中有几个简短的constexpr函数可以执行一些简单的计算。我在运行时和编译时上下文中都使用它们。我想在这些函数的主体中执行一些断言,但是assert(...)在constexpr函数和static_assert中无效(...)不能用于检查函数参数。例子:constexprintgetClamped(intmValue,intmMin,intmMax)noexcept{assert(mMinmMax?mMax:mValue);}有没有办法检查函数是否在运行时或编译时常量中执行,并且仅当它在运行时执行时才执行断言-时间?constexprintgetClamped(intmValu

c++ - static_assert - 一种动态自定义错误消息的方法

有没有办法让static_assert的字符串动态自定义然后显示?我的意思是://pseudocodestatic_assert(Check_Range::value,"Valueof"+typeof(T)+"typeisnotsogood;)"); 最佳答案 没有,没有。但这并不重要,因为static_assert是在编译时求值的,如果出现错误,编译器不仅会打印消息本身,还会打印实例堆栈(在模板的情况下)。看看这个综合示例inideone:#includetemplatestructIsInteger{staticboolcons