小编ruh*_*ner的帖子

固定大小字符串类的最佳实践

我想有一个固定大小的字符串类.理想情况下,接口将匹配std::string新接口永远不会分配新内存的一个区别.对于应该避免分配新内存的应用程序情况,它应该是一个方便的类.大小可以是静态的(在编译时已知).

我认为有两种方法.第一个是围绕char数组实现一个类,然后实现或多或少的所有函数std::string.我还必须实现一些运算符来创建std::string具有给定固定大小字符串的s等.

第二种方法,我甚至不确定是否可能,将继承std::string and覆盖可能改变字符串大小的所有函数.我查看了basic_stringVisual Studio中的标题,它似乎不是虚拟的,所以我想这不是要走的路.

您认为实施此类课程的最佳方法是什么?

c++ size fixed stdstring string-length

11
推荐指数
1
解决办法
2416
查看次数

可以通过非零划分仍然创建纳/无穷大

我有一个可能是零的数字.我除以那个数字,所以我想测试它是否为零以防止NaN和无穷大.由于分区内的舍入错误,我是否仍然可以创建NaNs /无穷大?

double x; // might be zero
double y;

if(x != 0) return y / x;
Run Code Online (Sandbox Code Playgroud)

编辑

谢谢你的回复.我会添加一些子问题.

1)假设x和y都不是NaN/+ INF或-INF,会导致-INF/+ INF导致更多的CPU周期或任何其他不希望的行为的分割?(会崩溃吗?)

2)有没有办法防止分裂导致无穷大?使用偏移等.

c++ nan division infinity

9
推荐指数
3
解决办法
675
查看次数

Qt使用颜色和Alpha贴图绘制图标

我想以不同的颜色绘制图标(仅一种颜色)。为此,我想导入单个alpha纹理,然后在应用程序中将其与给定的颜色组合。

结果应该是,当alpha贴图的不透明度为0时,什么都不会绘制到背景上;而当不透明度为1时,应该绘制使用的颜色。

一种解决方案应该隐藏在中的某个位置QPainter,因为您可以手动设置Composition-Mode(QPainter::setCompositionMode)。但是我没有让它像我想要的那样工作。

有人有主意吗?

提前致谢。

编辑:这是一张小图,解释了我想做什么。我想使用如图所示的Alpha-Map,然后使用颜色图层创建我的图标。重要的是,背景保持透明。

在此处输入图片说明

icons qt alpha qpainter

7
推荐指数
1
解决办法
4823
查看次数

std::deque 和 boost::deque 有什么区别?

std::dequeCppReference 中有相当详细的文档,但是它boost::deque文档似乎与标准的文档等效,只是添加了一些方法,例如nthindex_of

我缺少的两个类之间还有其他区别吗?

c++ boost

5
推荐指数
1
解决办法
1114
查看次数

使用Three.js提高性能

我目前正在编写我的第一个Three.js/WebGL应用程序,它在我的PC(Chrome)上运行得非常好.遗憾的是,在许多其他PC上,帧速率通常会低于每秒30帧.

由于应用程序实际上并不复杂,我想询问一些与应用程序相关的提示,以提高性能.该应用程序的一个版本可以在这里找到:

www.wrodewald.de/StackOverflowExample/

该应用程序包含一个使用64²顶点的动态(变形)平面.矩阵用于存储静态高度图和波形图.每个帧都会更新波形图以重新计算自身,一些过滤器用于与每个顶点相比"均匀".因此,必须更新平面的每个帧(颜色和顶点位置),这可能是性能问题的原因

第二个对象(菱形)不应该是一个问题,静止,移动一点但没有什么特别的.

有三个灯(环境,方向,球形),没有阴影,倾斜移位着色器和晕影着色器.

以下是每帧调用的函数:

var render = function() {
    requestAnimationFrame( render );
    var time = clock.getDelta();

    world.updateWorld(time);
    diamond.rotate(time);
    diamond.update(time);
    control.updateCamera(camera, time);
    composer.render();      
    stats.update();
}
Run Code Online (Sandbox Code Playgroud)

这是什么world.updateWorld(time)

//in world.updateWorld(time) where
// accmap: stores acceleration and wavemap stores position
// this.mapSize stores the size of the plane in vertices (64)

// UPDATE ACCELERATION MAP
for(var iX = 1; iX < (this.mapSize-1); iX++) {
    for(var iY = 1; iY < (this.mapSize-1); iY++) {
        accmap[iX][iY] -=  dT * (wavemap[iX][iY]) * …
Run Code Online (Sandbox Code Playgroud)

javascript performance three.js

4
推荐指数
1
解决办法
4614
查看次数

包含带有预处理器定义的文件

我想包含一个文件并使用路径的预处理器定义。

// in projects preprocessor definitions:    
HEADER="../somePath/theHeader.h"

// in a file
#include HEADER
Run Code Online (Sandbox Code Playgroud)

这在 Windows 上有效,但 XCode 抱怨这一点并且找不到该文件。替换HEADER为路径有效,因此该文件确实存在。那么,我错过了什么?

c++ macros include-path c-preprocessor

3
推荐指数
1
解决办法
2251
查看次数

类初始化与构造函数初始化列表的顺序

我想在类中初始化一堆成员以保持源文件更清晰.但是,对象采用我只通过构造函数接收的参数,并且可以通过赋值在构造函数初始化列表或构造函数中初始化.(第二种选择肯定不会起作用.)这基本上是这样的情景:

在标题中

class Foo
{

public:
    Foo(Pointer * ptr);

private:

    Pointer * ptr;
    Member m1{ptr, "SomeText"};
    Member m2{ptr, "SomeOtherText"};
}
Run Code Online (Sandbox Code Playgroud)

在CPP

Foo::Foo(Pointer*ptr) : 
    ptr(ptr) 
{
    // ...
}   
Run Code Online (Sandbox Code Playgroud)

现在的问题是:标准是否说明了ptrm1/ 之间的初始化顺序m2.显然,这段代码只有在ptr之前m1和之前初始化时才有效m2.

c++ initialization operator-precedence initialization-list in-class-initialization

3
推荐指数
1
解决办法
63
查看次数

在类模板中定义静态数组

我在类模板中有一个静态数组.链接器抱怨一个未定义的符号,即使应用了我在网上看到的提示,我也无法弄清楚出了什么问题.

template<unsigned int N1, unsigned int N2>
class Foo 
{
private:
    static const int Size = N1 * N2;

public:
// stuff

private:
    static float mArray[Size];

}
Run Code Online (Sandbox Code Playgroud)

CPP

template <unsigned int N1, unsigned int N2>
float Foo<N1, N2>::mArray[size] = {0};
Run Code Online (Sandbox Code Playgroud)

链接器抱怨没有定义Foo <...> :: mArray.当我将定义移动到标题时,我得到了编译(和链接),但我知道这对于静态来说是不好的做法.这里最好的方法是什么?

干杯

c++ arrays static templates definition

1
推荐指数
1
解决办法
255
查看次数