草庐IT

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

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

c++ - 在聚合初始化列表中的给定位置,传递到先前位置的值是否可以安全地从相应成员读取?

这个问题在这里已经有了答案:Isitdefinedbehaviortoreferenceanearlymemberfromalatermemberexpressionduringaggregateinitialization?(4个答案)关闭7年前。struct{inta,b;}s={5,s.a+1};按照标准,在上面的例子中读取“s.a”是安全的,所以s被初始化为a=5和b=6吗?如果是这样,大多数编译器都遵守这条规则吗?(以上在VC10编译。)

c++ - 如何有效地存储矩形网格?

所以我在考虑用不同形状的矩形制作一个建筑游戏,而不仅仅是正方形,但我想不出一个有效的方法来做到这一点。例如,我不希望像俄罗斯方block那样由方block组成的网格组成每个形状。我希望每件作品都是一个具有宽度和高度的对象。例如,一block2*3的方block不会占用6个方block,它只是一个矩形。我必须能够有效地组织棋子,并且能够在某个坐标处得到棋子。如果我只使用二维图block数组,它会占用我不需要的内存。 最佳答案 无论您如何操作,要在任何给定坐标处获取矩形都非常耗费资源,但最有效的方法可能是创建一个矩形不受限制的松散网格。

c++ - 有没有办法在编译时检测是否可以使用给定的一组参数类型成功调用通用 lambda?

我希望能够在编译时确定,给定一个通用的lambda类型,它是否可以用一组给定的参数类型调用。我有以下示例C++14实现:#include//helperfunction;thisoverloadhandlesthecasethatthecallispossible//useSFINAEwiththeextratemplateparametertoremovethisfromconsiderationwhenthe//callisill-formedtemplate()(std::declval()...))>autoeval(Funcf,Args&&...args){returnf(a

c++ - 递归生成给定子集大小的所有组合 (C++)

观察下面的代码:#include#include#includetemplatevoidprint_2d_vector(std::vector>&v){for(inti=0;istructpermcomb2{std::vector>end_set;std::vector*data;permcomb2(std::vector¶m):data(¶m){}voidhelpfunc(std::vector&seen,intdepth){if(depth==0){end_set.push_back(seen);}else{for(inti=0;istd::vector>permt

c++ - 给定迭代器列表,如何从 vector 中删除元素?

我有一个intvector和一个映射,其中包含一些指向该vector的迭代器作为值。我需要从map中删除键,以及值指向的vector元素。我的代码看起来像这样:usingRenderData=int;usingElement=std::string;structRef{std::vector::iteratorref;std::functionupdate;boolshould_remove;};intmain(){std::vectorints{1,2,3,4,5,6,7,8,9};std::unordered_mapelements;//Here,Ineedtoremovesome

c++ - 检查 PDCurses/NCurses 中当前/给定位置的字符

有没有办法检查控制台窗口中给定位置的字符?例如,如果我想检查位置(10,12)是否有星号(*),我该怎么做?或者,如果我使用move(10,12);,我该如何检查当前光标位置是哪个字符?我正在使用PDCurses。 最佳答案 inch系列函数应该这样做:chtypeinch(void);chtypewinch(WINDOW*win);chtypemvinch(inty,intx);chtypemvwinch(WINDOW*win,inty,intx); 关于c++-检查PDCurses/

c++ - 由 n 个点定义的超平面

我有以下问题:给定空间中的n个点,我正在搜索穿过它们的超平面。此类问题的最简单示例是两点(x_1=0,x_2=0)和(1,-1),我想返回1*x_1+1*x_2=0。我的点将是32位整数的n元组。所需超平面a_1x_1+a_2x_2+...=c的系数a_i也必须是32位整数。如果不能以这种方式定义超平面,我想报告这一点。我的项目是用C++编写的。我可能可以自己编写代码,但我预计这需要大量工作。此外,我的直觉是,这是一个足够普遍的问题,可能会有一个开源库可以解决我的问题。有人知道可以解决我的问题的库吗?提前致谢! 最佳答案 实际上这并

c++ - 如何从一个 vector 计算坐标系?

如何只给定一个vector来创建坐标系?(左手、右手、本地或不同空间)我正在寻找只给定一个vector的局部坐标系统算法:原因:1)Z可能是表面法线,那么X和Yvector就是切线和副切线vector2)另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。Vector3Z={0.0f,0.0f,1.0f};//given//fillxandyCreateXHandedCoordinateSystem(Vector3*X,Vector3*Y,constVector3&Z){//implementationgoeshere..//evaluat

c++ - 我可以检查给定的数字是否可以是任何具有 n 项的算术级数的总和?

对于给定的数字s是否有可能只检查是否有任何可能的等差级数具有n项并且这些n项的总和导致s。其中AP的起始元素和差值不能为零。例如:s=24&n=4是的,AP可能是3579。注意:我只是想检查它是否可能。无需找到实际的数组。0我的尝试:我们知道一个AP的总和等于s=n(first+last)/2;因此first+last=2*s/n;2*s/n应该是一个整数。我们也知道last=first+(n-1)diff;所以我的表达式变成2*first+(n-1)diff=2*s/n;首先=(2*s/n-(n-1)diff)/2;对于特定的diff值,它应该是一个整数。这是我的方法,但它的时间复杂