小编Pie*_*igi的帖子

C++构造函数与初始化列出速度比较

构造函数和初始化列表之间的执行时间是否存在差异?(或者只是编码首选项的问题).我有一组需要经常创建的对象,并且想知道使用初始化列表而不是构造函数是否有任何性能提升.

如果我要创建一百万个A类实例和另一百万个B类实际选择会更好(这些对象代表网络中生成的数据包,因此这些数字).

 class A {
   private:
     int a, b;

   public:
     A(int a_var, int b_var):a(a_var), b(b_var) {}; 
 };

 class B {
   private:
     int a, b;

   public:
     B(int a_var, int b_var) {
        a = a_var;
        b = b_var;
     }
};
Run Code Online (Sandbox Code Playgroud)

如果任何构造函数对于基本类型比其他构造函数更快(如示例中所示),如果a和b被类型替换,它会更快吗?

输入示例:

 class AType {
   private:
     string a, b;

   public:
     AType(string a_var, string b_var):a(a_var), b(b_var) {}; 
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization-list

17
推荐指数
2
解决办法
2万
查看次数

GL_COLOR_BUFFER_BIT和GL_DEPTH_BUFFER_BIT的目的是什么?

作为一名OpenGL初学者,我想知道他们做了什么以及为什么需要这些.例如在通话中

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

opengl

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

QT5 QPlatformNativeInterface和HWND

使用Qt5(来自WId)的Windows上获取HWND的答案之一中,建议使用QPlatformNativeInterface以恢复本机窗口处理程序.

要访问QT标头,尽管示例使用其完整路径:

#include <QtGui/5.0.0/QtGui/qpa/qplatformnativeinterface.h>
Run Code Online (Sandbox Code Playgroud)

当然,这不是一个明确的解决方案.有没有办法使用QT的默认包含系统包含QPlatformNativeInterface

请注意,都没有

#include <QPlatformNativeInterface> 
Run Code Online (Sandbox Code Playgroud)

工作(在默认QT构建期间不生成此文件)

也不

#include <QGuiApplication>
Run Code Online (Sandbox Code Playgroud)

作品(仅包含QPlatformNativeInterface的前向声明 )

hwnd wid qtgui qt5

14
推荐指数
3
解决办法
8398
查看次数

在Eigen中将3D点的向量转换为均质表示

我有一个包含N个3D点的缓冲区,存储为[XYZXYZXYZ ... XYZ]

此缓冲区可以Eigen::Matrix<float, 3, N>使用Eigen :: Map 直接映射到。由于我将使用仿射变换(即Eigen::Matrix4f矩阵)对点进行变换,因此我想将同一缓冲区映射到本征结构,从而使我可以将缓冲区视为Eigen::Matrix<float, 4, N>最后一行仅包含1 的矩阵,即每个单点由齐次向量[XYZ 1]。

有没有一种简便的方法可以执行此操作,而无需复制原始缓冲区对每个单点应用转换

3d geometry homogenous-transformation eigen

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

针对特定目标运行fixup_bundle(包)

我想在运行CPACK时合并外部dll,而不枚举所有外部dll(通过显式调用INSTALL(FILE ...))

使用fixup_bundle,可以通过复制所需的库来修复安装文件夹(CMAKE_INSTALL_PREFIX)中的所有可执行文件。

INSTALL(CODE "
   include(BundleUtilities)
   fixup_bundle(\"${APPS}\"   \"\"   \"${DIRS}\")
   " DESTINATION bin COMPONENT Runtime)
Run Code Online (Sandbox Code Playgroud)

此代码在构建INSTALL目标时执行,并且仅处理存在于文件夹CMAKE_INSTALL_PREFIX中的元素。

我想做的是在CPACK添加的PACKAGE目标的构建过程中运行fixup_bundle。这样,生成的安装脚本还将包括externa库。

有没有人设法做到这一点?

cmake cpack

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

调用模板化方法,仅允许子类作为参数

假设我有一组继承自单个超类S的类:

class S{ ... };

class C1 : public S{ ... };
class C2 : public S{ ... };
Run Code Online (Sandbox Code Playgroud)

然后假设我有一个模板化的方法:

template<class T> void foo(T* instance);
Run Code Online (Sandbox Code Playgroud)

我想静态检查foo从未被调用提供超类的实例,但只调用提供其中一个(具体)子类(例如显式调用foo<C1>(x)实例)

这可能吗?

c++ templates specialization

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

使用QT5编译QtOpenCL

任何人都设法使用Qt5(可能在Window下)编译库QtOpenCL

编辑:我设法通过将代码移植到QT5来编译代码.我在问题中留下了我想在方法中替换的脏部分并描述我在答案中所做的事情.

我无法提供opencl安装的include路径,所以我

通过添加行手动修改src/opencl/opencl.pro

INCLUDEPATH += " *[absolute path to the openCL include folder]* "
QMAKE_LIBDIR_OPENCL = "*[absolute path to the opencl lib folder]*"
Run Code Online (Sandbox Code Playgroud)

通过添加行手动修改src/openclgl/openclgl.pro

INCPATH += " *[absolute path to the openCL include folder]* "
QMAKE_LIBDIR_OPENCL = "*[absolute path to the opencl lib folder]*"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何以更清洁的方式解决这个问题?

qmake opencl qt5

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

C++动态内存分配问题

以下代码根据我如何定义newImagesData给出了seg.fault(参见下面的注释).如果它的数组一切正常,但如果定义为指针 - 错误:(

//Mat newImagesData[FIFO_SIZE]; // Mat is a class from opencv
Mat* newImagesData;

void func1( )
{
    ...
    newImagesData = (Mat*)malloc(FIFO_SIZE * sizeof(Mat)); //if *newImagesData
    fifoInit(&newImagesFB, newImagesData, FIFO_SIZE);
    ...
}

void fifoInit(FIFOBuffer* fifo, Mat* imageData, int size)
{
    fifo->data = imageData;
    fifo->end = 0;
}

void fifoWrite(FIFOBuffer* fifo, Mat* frame)
{
    fifo->data[fifo->end] = *frame; // seg fault with *newImagesData ; OK with newImagesData[]
    memcpy(&fifo->data[fifo->end], frame, sizeof(Mat)); // OK with *newImagesData
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我使用memcpy()它工作正常.我能理解我做错了什么.有帮助吗?

c++ opencv pointers memory-management

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