小编Har*_*rry的帖子

有继承的朋友类

如果我有两个类继承如下:

class A
{
    ...
}

class B : public A
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

第三类定义为朋友类A:

class C
{
    friend class A;
}
Run Code Online (Sandbox Code Playgroud)

我是否能够从class B(也是类型的对象A)所有成员访问,class C就像我首先定义class B了朋友类一样?

c++ inheritance access-control friend

9
推荐指数
2
解决办法
4263
查看次数

在运行时设置变量

我正在制作一个NSIS脚本,用于检查是否安装了以前版本的应用程序.如果是,则询问是否应从此先前版本导入配置文件.所以我有一个全局变量配置文件,我试图在运行时设置,具体取决于用户选择"是"还是"否".我遇到的问题是编译它时会报告文件:"$ {XMLConfigDir}*.xml" - >找不到文件.因为尚未设置XMLConfigDir.那么无论如何在运行时设置变量?

nsis

5
推荐指数
2
解决办法
7545
查看次数

重置计数器或让它增加并使用模数更有效

假设您需要跟踪调用方法的次数,并在调用n次时打印某些内容.什么是最有效的:

  1. 使用long变量_counter并在每次调用方法时增加它.每次调用你测试的等式"_counter%n == 0"

  2. 使用int变量_counter并在每次调用方法时增加它.当_counter = n时,打印消息并将变量_counter重置为0.

有人会说差异可以忽略不计,你可能是对的.我只是好奇最常用的方法

c++ java performance coding-style

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

当在Release中作为QImage加载时,相同的图像具有不同的像素数据

比较以QImage :: Format_Indexed8格式加载的两个相同图像仅在以释放模式运行时才具有不同的像素数据.

以下代码显示在Release中运行时的差异,但在Debug中运行时则不然:

int main()
{
  QImage _img1("C:\\tmp\\diff\\identicals\\file1.png");
  QImage _img2("C:\\tmp\\diff\\identicals\\file2.png");

  std::cout << QString("Format 1: %1").arg(_img1.format()).toStdString().c_str() << std::endl;
  std::cout << QString("Format 2: %2").arg(_img2.format()).toStdString().c_str() << std::endl;

  const unsigned char * _bits1 = _img1.bits();
  const unsigned char * _bits2 = _img2.bits();

  std::cout << QString("Byte count 1: %1 | Byte count 2: %2").arg(_img1.byteCount()).
    arg(_img2.byteCount()).toStdString().c_str() << std::endl;

  for (int _i = 0; _i < _img1.byteCount(); _i++)
  {
    if (_bits1[_i] != _bits2[_i])
    {
      std::cout << "--DIFFERENCE--" << std::endl;
      std::cout << QString("i --> %1").arg(_i).toStdString().c_str() << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ qt qimage

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

使用函数指针进行结构初始化

我发现以下C++代码的语法我以前从未见过.有人关心如何详细说明这项工作吗?

功能1

glm::vec3 BottomCircleOffset(float fElapsedTime)
{
    return glm::vec3(.0f,.0f,.0f);
}
Run Code Online (Sandbox Code Playgroud)

功能2

glm::vec3 OvalOffset(float fElapsedTime)
{
    return glm::vec3(.1f, .1f, .1f);
}
Run Code Online (Sandbox Code Playgroud)

实例结构

struct Instance
{
    typedef glm::vec3(*OffsetFunc)(float);

    OffsetFunc CalcOffset;

    glm::mat4 ConstructMatrix(float fElapsedTime)
    {
        glm::mat4 theMat(1.0f);
        theMat[3] = glm::vec4(CalcOffset(fElapsedTime), 1.0f);
        return theMat;
    }
};
Run Code Online (Sandbox Code Playgroud)

到现在为止一切都很好.我知道OffsetFunc是一个函数指针的typedef,它将 float作为参数并返回一个glm :: vec3.我也理解CalcOffset是这样一个函数的变量.

然后代码创建一个Instance类型数组,如下所示:

Instance g_instanceList[] =
{
    {StationaryOffset},
    {OvalOffset},
    {BottomCircleOffset},
};
Run Code Online (Sandbox Code Playgroud)

这是我以前从未遇到过的语法:

  • 我们如何通过简单地添加函数名来初始化实例类型?
  • Instance结构甚至没有一个带有函数指针的构造函数,它如何知道将CalcOffset初始化为这个值?

c++ syntax function-pointers

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

Google地图中的方向箭头标记

我试图找到方向箭头标记可绘制图标(在谷歌地图中使用),但对于我的爱无法找到它或关于此事的大量信息.

有问题的标记是这个:

箭头标记

我猜这个箭头应该在内置的Android drawables中可用吗?或者,指向图标的链接也足够了.

icons android google-maps marker android-drawable

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

同时写入内存和磁盘

我正在开发需要保持一定时间的应用程序牛逼的数据存储器(可配置)和另一个时间T2在磁盘上的持久存储数据的价值.这背后的原因是,频繁询问的数据将被存储在内存中并更快地检索,而较旧的,较少的用户数据将被存储并可在磁盘上检索.

问题是:我不能简单地写入内存,然后在时间t之后将内存缓冲区的全部内容复制到磁盘,就像应用程序崩溃一样,存储在内存中的最新数据将丢失.因此,每次收到新数据时,我都需要将其同时存储在内存和磁盘上.

我的问题是,是否有一种有效的方法将内存中的缓冲区镜像到磁盘的一部分?我正在寻找一种更有效的方法,而不是写入内存,然后在每次数据更新时写入磁盘.

c c++ memory

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

将 2D 纹理阵列的单层从 GPU 复制到 CPU

我正在使用 2D 纹理数组来存储一些数据。由于我经常想要绑定这个 2D 纹理数组的单层,因此我为每个层创建单独的GL_TEXTURE_2D纹理视图:

for(int l(0); l < m_layers; l++)
{
    QOpenGLTexture * view_texture = m_texture.createTextureView(QOpenGLTexture::Target::Target2D,
                                                                m_texture_format,
                                                                0,0,
                                                                l,l);
    view_texture->setMinMagFilters(QOpenGLTexture::Filter::Linear, QOpenGLTexture::Filter::Linear);
    view_texture->setWrapMode(QOpenGLTexture::WrapMode::MirroredRepeat);
    assert(view_texture != 0);

    m_texture_views.push_back(view_texture);
}
Run Code Online (Sandbox Code Playgroud)

这些 2D 纹理视图工作得很好。但是,如果我想使用该纹理视图从 GPU 端检索 2D 纹理数据,则它不起作用。

换句话说,以下代码不复制任何数据(但不会引发 GL 错误):

glGetTexImage(GL_TEXTURE_2D, 0, m_pixel_format, m_pixel_type, (GLvoid*) m_raw_data[layer] )
Run Code Online (Sandbox Code Playgroud)

但是,检索整个GL_TEXTURE_2D_ARRAY确实有效:

glGetTexImage(GL_TEXTURE_2D_ARRAY, 0, m_pixel_format, m_pixel_type, (GLvoid*) data );
Run Code Online (Sandbox Code Playgroud)

当仅修改单个层的数据时,如果我需要在 2D 纹理数组的所有层之间进行复制,显然会造成性能损失。

有没有办法将 GPU->CPU 仅复制GL_TEXTURE_2D_ARRAY的单层?我知道有相反的情况(即CPU->GPU),所以如果没有的话我会感到惊讶。

opengl qt textures texture2d

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