草庐IT

non-void

全部标签

c++ - 在 MSVC ABI 中,如何可靠地找到仅给出 (void*) 的 vtable?

这个问题专门针对不可移植的MSVCABI内容。我正在尝试用显然不可移植但不神奇的C++编写与C++的typeid等效的代码。对于ItaniumABI(在Linux/Mac上使用),它非常简单:conststd::type_info&dynamicast_typeid(void*mdo){std::type_info**vptr=*reinterpret_cast(mdo);std::type_info*typeinfo_ptr=vptr[-1];return*typeinfo_ptr;}所以现在我正在查看64位MSVCABI,该死的,我被难住了。对于非常简单的类,即以偏移量0处的vfp

c++ - 当其返回类型为 void 时,使用其他 lambda 结果调用 lambda

以下函数生成一个lambda,它使用第一个可调用对象的结果调用第二个可调用对象。如果第一个可调用对象返回一个元组,它将应用于第二个可调用对象。templatestructis_tuple:std::false_type{};templatestructis_tuple>:std::true_type{};templateconstexprdecltype(auto)pipeline(S&&source,T&&target){return[callables=std::tuple(std::forward(source),std::forward(target))](auto&&...a

c++ - decltype((void)T{}) in template Partial Specialization 不推导?

templatestructTest{staticconstintvalue=0;};templatestructTest{staticconstintvalue=2;};templatestructTest{staticconstintvalue=1;};intmain(){cout::valuegcc/clang上的代码都出现错误:模棱两可,但是将decltype更改为void_t是可以的。为什么? 最佳答案 对我来说,这看起来像是一个编译器错误:你真的需要T{}的副作用吗??decltype((void)T{})的整体构造应该

c++ - 使用 void 函数检查 gtest 中的错误

在使用ASSERT_或EXPECT_宏的gtest中使用辅助函数时,该辅助函数必须为空。但是,我也想检查调用测试代码中的那些错误。ASSERT_NO_FATAL_FAILURE宏有助于在触发ASSERT_时停止调用代码,但我也想通过正确处理EXPECT_故障(阅读:NonFatalFailures)来扩展它。这是我到目前为止得到的:#include//Avoidtest-functionusingASSERT_orEXPECT_callsshouldbeencapsulatedbythismacro.//Example:CHECK_FOR_FAILURES(MyCheckForEqua

c++ - boost multi_index : retrieve unique values of a non-unique key

我有一个boost::multi_index_container其元素是这样的结构:structElem{Aa;Bb;Cc;};主键(在数据库意义上)是a和b的composite_key。其他键的存在是为了执行各种类型的查询。我现在需要检索一组c的所有不同值。这些值是无论如何不是唯一的,而是遍历所有条目(尽管是有序的),或者使用std::unique似乎很浪费,考虑到c的不同值的数量预计将我是否缺少更有效地获得此结果的简单方法? 最佳答案 我搜索了Boost.MultiIndex文档,但似乎无法找到一种方法来执行您想要的操作。我很想

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

据我了解,以下内容对boost::shared_ptr有效:boost::shared_ptrptr;...boost::shared_ptrc_ptr=ptr;//Valid相同的行为不适用于boost::interprocess::managed_shared_ptr。为什么? 最佳答案 boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个辅助类,您可以使用它来定义一个类的类型。来自interprocessdocs:typedefmanaged_shared_ptr::ty

c++ - 非递归(non-recursive) Automake

我正在尝试将项目转换为使用非递归automake。基于对SO的搜索,我可以看到该主题已在一定程度上得到涵盖。但是关于如何将递归automake项目转换为非递归项目,实际上并没有任何问题。我已经读过KarelZak'sblog当然还有autotools-mythbuster.experiencesregardingnon-recursiveautomake有问题但它没有说明如何转换项目。唯一能解释一点的问题似乎是关于subdir-objectsoption.但是我无法用这些资源转换我的项目。因此这个问题。让我们从一个简单的项目设置开始:project/\--configure.ac|--

c++ - 在宏中包装模板函数调用,或避免特化 void 返回

我有以下功能,允许我包装OpenGL命令并在出现问题时记录:templatestructChecker{staticResrun(conststd::string&function_name,Func&&func,Args&&...args){Resresult=func(std::forward(args)...);check_and_log_error(function_name);returnresult;}};templatestructChecker{staticvoidrun(conststd::string&function_name,Func&&func,Args&&.

c++ - 避免接受 lambda 的方法的 const/non-const 重复

classFrame表示像素类型为P的图像.由于底层数据缓冲区格式的多种灵active,遍历其像素的算法并非易事。template//Pispixeltype;RM=is_row_majorclassFrame{//...templatevoiditerate(Ff){//iterateinawaythatisperformantforthisbufferif(stride==(RM?size.w:size.h)){auton=size.area();for(index_tk=0;k(stride)*(RM?size.h:size.w);for(index_tk0=0;k0我希望能够同

c++ - 规则 "A user-defined but do-nothing destructor is also a non-trivial destructor"是否过于严格?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。ImprovethisquestionclassBase{public:~Base(){}private:intval;};Basebase;//aglobalvariable你看,析构函数什么都不做,和c++编译器提供的默认析构函数一样。但是根据帖子Whatisanon-trivialdestructorinC++?,析构函数仍然是一个非平凡的析构函数我知道,标准中的每条规则都必须严格。但是,根据我粘贴的上面的代码,用户定义