小编use*_*020的帖子

如何制作set <T>(args ...)方法?

例如,我有一个班级

class A
{
public:
    template<class T, class... Args>
    void set(Args&&... args);

private:
    std::shared_ptr<Member1Type> m_member1;
    std::shared_ptr<Member2Type> m_member2; // Member types are all different.
};
Run Code Online (Sandbox Code Playgroud)

我希望我能用它

A a;
a.set<Member1Type>(args... to construct Member1Type);
Run Code Online (Sandbox Code Playgroud)

喜欢的

make_shared<T>(args...);
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在实现该方法时将成员类型链接到正确的成员.谢谢!

c++ templates c++11 c++14

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

简单类中的虚方法真的是虚的吗?

我有一个简单的类,它没有派生类型,也没有与其他类的继承关系。

class A
{
    virtual void f() {}
}
Run Code Online (Sandbox Code Playgroud)

我想知道“虚拟”方法实际上是否真的不是虚拟的,所以该类与

class A
{
    void f() {}
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance virtual-functions

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

没有数据的类的对象是否会占用内存?

可能重复:
C++:空类对象的大小是多少?

我有一个没有数据的类,如下所示

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

我用它来定义一个对象

A a;
Run Code Online (Sandbox Code Playgroud)

我认为对象"a"有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?

如果对象"a"的类型为void,会发生什么.非常感谢!

c++

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

如何为类模板生成别名?

我希望MyVector可以选择std :: vector或boost :: container :: vector.怎么实现呢?我可以使用宏,但我被告知他们不是很安全.谢谢.

#define MyVector std::vector
// #define MyVector boost::container::vector
Run Code Online (Sandbox Code Playgroud)

c++ alias templates

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

如果包含"assert.h"的每个文件都需要很长的编译时间吗?

根据Mats Petersson的结果,我做了一些测试.我没有必要通过定义宏来打开和关闭断言.我的结论是:

  1. 包括标准头,如<cassert>,<vector>,<memory>等等,需要一点编译时间.我们不需要关心.
  2. 包含自己的文件时要小心.包括那些真正需要的,因为依赖项需要在更改依赖项后重新编译.
  3. 包含类库的集合头时要小心,例如<QWidgets>(Qt头包含其所有小部件).这需要花费大量时间进行编译.

[原帖]

如果每个文件都包含"assert.h",是否需要很长的编译时间?我认为关于"math.h"或其他常见文件的类似问题.我不喜欢预编译的标题.当我有一个Vector3D类来表示具有x,y,z分量的3D空间中的矢量时,会发生这种情况.该课程几乎用于所有地方.我有一个函数名称component(int i)i0和2之间断言.出于性能原因,我没有把它的实现放在cpp文件中.因此"assert.h"几乎包含在所有地方.

#pragma once

#include <assert.h>

/// A vector in a 3D space with 3 components: x, y, and z.
class Vector3D
{
public:
    Vector3D(float x = 0, float y = 0, float z = 0)
    {
        m_component[0] = x;
        m_component[1] = y;
        m_component[2] = z;
    }

    float x() const    {return m_component[0];}
    float y() const    {return m_component[1];}
    float z() const    {return m_component[2];} …
Run Code Online (Sandbox Code Playgroud)

c++ compilation

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

如何在不使用信号插槽连接的情况下触发操作?

触发Qt操作的常用方法是使用信号槽连接.任何其他方式,因为我的功能不是一个插槽?比如有些直接打电话?

c++ qt

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

如何在模板类中专门化模板成员函数?

例如:

template<unsigned number>
struct A
{
    template<class T>
    static void Fun()
    {}
};
Run Code Online (Sandbox Code Playgroud)

并想要专门化A <1> :: Fun()

template<>
A<1>::Fun<int>()
{
    /* some code here. */
}
Run Code Online (Sandbox Code Playgroud)

不起作用.怎么做?谢谢.

c++ templates specialization

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

当成员发出信号时如何发出信号?

例如,我有一个类Document,它有一个私有成员QUndoStack,有一个信号cleanChanged().当成员发出信号时,我希望包含类Document发出一个具有相同名称的信号,或者来自成员的信号可以转移到包含类.因此,外界知道cleanChanged发生了.

c++ qt signals

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

如何为 QFormLayout 的第一列设置最小宽度?

如何设置第一列的最小宽度QFormLayout?我可以QGridLayout通过 using来做到这一点QGridLayout::setColumnMinimumWidth(int, int),但找不到一种方法来做到这一点QFormLayout

c++ qt qtgui qlayout

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

如何给命名空间一个缩写?

我有一个命名空间层次结构,并希望为一些长命名空间名称提供缩写.例如,我有

Math::Geometry::OneDimension::
Run Code Online (Sandbox Code Playgroud)

我想用GeGeometry,并D1OneDimension因此以下工作

Math::Ge::OneDimension::
Math::Geoemtry::D1::
Math::Ge::D1::
Run Code Online (Sandbox Code Playgroud)

是否可以使用命名空间别名来执行此操作?

c++ namespaces

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