草庐IT

c++ - Visual C++ 无法推断在 ctor 中用作默认值的函数的给定(!)模板参数

我正在尝试使用模板函数返回模板类构造函数中参数的默认值。函数的模板参数也是类的模板参数。我在下面提供了一个示例。背景该示例显示了确切的用例和依赖项,因为它们也出现在我的应用程序中。X类实际上是一个相当大的类,它管理一个大数据block,该大数据block被分成更小的block。类助手是一个内存管理器,它以较小的block大小分配和释放内存。实际上,GetHelper函数会在运行时尝试推导出Helper的一些构造函数参数,所以这就是我使用这种设计的原因。实际问题当定义了宏USE_NS和SHOW_ERROR时,代码无法编译,在第66行给出错误C2783无法推断模板参数。这是我尝试使用模板函

c++ - 是否有对两位值的 std::bitset 的概括?

假设我是一名基因组科学家,试图存储极长的字符串,每个字符串代表两位信息(即每个元素是G、A、T或C)。因为字符串非常长,所以我需要能够以精确的2N位(或者更确切地说,N/4字节)存储长度为N的字符串。考虑到这种动机,我正在寻找std::bitset的概括(或boost::dynamic_bitset)适用于两位值而不是一位值。我要存储N这样的两位值,每个值可以是0、1、2或3。我需要在内存中尽可能紧密地打包数据,所以vector将不起作用(因为它浪费了4倍的内存)。实现我的目标的最佳方式是什么?一种选择是用定制的operator[]包装现有的位集模板。、迭代器等,但如果可能的话,我更愿

c++ - 纯右值的结果

[basic.lval]/5状态:Theresultofaprvalueisthevaluethattheexpressionstoresintoitscontext.AprvaluewhoseresultisthevalueVissometimessaidtohaveornamethevalueV.Theresultobjectofaprvalueistheobjectinitializedbytheprvalue;anon-discardedprvaluethatisusedtocomputethevalueofanoperandofabuilt-inoperatororthath

c++ - 你如何赋予构造函数生成的右值一个左值的生命周期?

while(model.condition){autodata=yield_data();auto_=manipulate(model,data);model.get_info(args);}我有一个manipulate类型的RAII对象,当它超出范围时,其析构函数会撤消它引起的突变,很像std::lock_guard。问题是用户必须键入auto_=否则析构函数将在model.get_info()之前被调用;我不喜欢用户必须键入auto_=。为什么用户会想创建一个从未使用过的对象?我的第一个想法是让构造函数[[nodiscard]];但是构造函数没有返回值。有没有办法告诉编译器操作右值

c++ - 使用 stringstream 读取浮点值的奇怪失败

我有以下简单代码,它使用c++stringstream读取浮点值(double)。我使用stringstream::good检测读取是否成功。奇怪的是,值被读入float变量,但是good()返回false。底部的代码返回:failed:3.14159我在mingw32下使用gcc4.8.1编译代码,使用g++-std=c++11test.cpp。知道为什么这个读法不是好吗?判断float实际读取成功的正确方法是什么?谢谢#include#includeusingnamespacestd;voidreadFloat(strings){doublei=0!;stringstreamss(

c++ - boost::test 中是否有可以返回错误值的函数?

BoostTestLibrary是一个非常有用的单元测试框架。但是,我感到不舒服的一件事是,在单元测试期间,如果发生错误,它会通知用户而不是程序本身。让我以BOOST_CHECK为例来阐明我的观点:i=3;j=4;BOOST_CHECK(i==j);上面的测试用例会失败。因此,检查细节以找出此测试失败的原因将非常有趣。在这种情况下,如果程序知道单元测试失败,打印一些变量或执行更复杂的操作(例如将文件写入磁盘)将是必要的。但是,BOOST_CHECK不会返回一个值来表示测试是否成功。一个完美的函数应该是这样的:i=3;j=4;if(Enhanced_BOOST_CHECK(i==j)==

c++ - 无法创建以 vector 为键和自定义类为值的 map

我创建了下面的抽象类来评估简单游戏的棋盘位置。抽象类被每个派生类覆盖,所以在game.h中只定义了评估函数我试图通过使用内存来提高我的程序的效率,但我无法让我的map正常工作。编译器对行results[board]=best抛出错误。此行试图将映射到当前棋盘(整数vector)的值设置为从该位置开始的最佳可能移动。Move是我创建的一个类,它只包含一个分数、一个要删除以制作下一个板的数字,以及要从中删除数字的索引(堆)。“results[board]=best”的编译器错误表示没有匹配的函数调用move::move()。我不明白这个错误,因为我不是要创建新的着法,只是存储当前的最佳着法

c++ - 在位置 N 处检索 C++ 可变参数模板常量参数值的适当方法是什么?

我想知道在位置N(N在编译时已知)处检索可变参数模板常量参数值的正确方法是什么。例如,假设您有一个模板接收可变数量的函数指针作为参数,您需要检索第二个函数指针。现在,我能想到的只有这个……typedefint(*func)(int);templatestructtestme{inlineintgetme(intp)const{returnstd::array{F...}[1](p);}};...不用说,这是非常骇人听闻的。有一个更好的方法吗?谢谢。编辑:基于typedeftemplate的代码,我制作了一个可以接受任何类型作为可变模板参数的版本。它已经过测试,可以在GCC4.6的实验版

c++ - 具有 "placeholder"值的宏

我正在使用一个包含一组预处理器库的库。其中之一是FOR_EACH样式的宏,它遍历__VA_ARGS__并为每个参数调用用户提供的宏。用户提供的宏调用如下:SOME_MACRO(current_arg)但是,问题在于它只适用于采用单个参数的用户提供的宏。我正在尝试做一些特别的事情,它涉及struct的名称和结构中的每个字段。问题是,这需要宏的两个参数。由于我正在使用的库只接受一元宏,是否有某种方法可以将附加参数“绑定(bind)”到我的宏?截至目前,我必须在我的宏中硬编码结构的名称。所以,如果我正在使用的struct被命名为Foo,我不得不说:#defineMY_MACRO(FIELD)

c++ - const 引用右值的类数据成员的生命周期是多少?

通常这个讨论只针对局部函数变量:voidfoo(constint&i){//useitillfoo()ends}foo(3);但是,这条规则是否也适用于class成员?structA{constint&a;A():a(3){}//version1A(constint&i):a(i){}//version2};现在A用作,{return()?newA:newA(3):newA(some_local_variable);}a的内容是否会在all3的整个生命周期内保持不变新分配A? 最佳答案 C++03标准(“12.2/5临时对象”部分)