小编Dan*_*Dan的帖子

在C++中创建动态类型

我正在编写一个通用软件,它将加载到同一基本硬件的许多不同变体上.它们都具有相同的处理器,但具有不同的外围设备和它们自己需要执行的功能.通过读取硬件开关值,软件将知道应该运行哪个变体.

这是我目前的实现,简而言之:

class MyBase
{
public:
    MyBase() { }
    virtual run() = 0;
}


class VariantA : public MyBase
{
public:
    VariantA () { }
    virtual run()
    {
        // Run code specific to hardware Variant-A
    }
}


class VariantB : public MyBase
{
public:
    VariantB () { }
    virtual run()
    {
        // Run code specific to hardware Variant-B
    }
}


void main()
{
    MyBase* variant;
    uint_8 switchValue = readSwitchValue();

    switch(switchValue)
    {
    case 0:
        variant = new VariantA();
        break;

    case 1: …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates design-patterns

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

使用Gitlab CI清除管道缓存

管道完成后,是否可以使用Gitlab CI使管道缓存无效或清除?

我的.gitlab-ci.yml文件具有以下全局缓存定义

cache:
  key: "%CI_PIPELINE_ID%"
  paths:
    - './msvc/Project1`/bin/Debug'
    - './msvc/Project2`/bin/Debug'
    - './msvc/Project3`/bin/Debug'
Run Code Online (Sandbox Code Playgroud)

cache-key值指定每个管道应维护自己的缓存,这可以正常工作,但是在管道完成后,缓存文件仍然存在。随着数百个管道的运行,大小开始增加,手动删除我们计算机上的缓存文件夹并不是一个很好的解决方案。

我尝试在管道的末尾添加清理作业

cleanup:
  stage: cleanup
  script:
  - rm -rf './msvc/Project1/bin'
  - rm -rf './msvc/Project2/bin'
  - rm -rf './msvc/Project3/bin'
  when: always
Run Code Online (Sandbox Code Playgroud)

会删除本地文件,但不会从缓存中删除它们。

我在这里想念什么吗?

当前正在运行的Gitlab-EE 10.3.3

gitlab gitlab-ci gitlab-ci-runner

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

从Lua设置C属性

我在C中有一些值,我想从Lua更新,我已经编写了自己的绑定函数,但我想知道是否有可能.

我希望能够做到这一点

myNamespace.myValue = 10
Run Code Online (Sandbox Code Playgroud)

让它做同样的事情

myNamespace.setMyValue(10)
Run Code Online (Sandbox Code Playgroud)

可能?只是很好奇.直接分配/读取值而不是调用get/set函数更简洁.Lua可以做那样的自动翻译吗?

c c++ lua

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

sizeof()值是由编译器还是链接器确定的?

我正在尝试解决c ++问题,其中我的代码的两部分为sizeof()运算符返回不同的结果.

这就是我的经历

MyClass* foo = new MyClass();
int size = sizeof(*foo)
Run Code Online (Sandbox Code Playgroud)

我将此代码放在项目的两个不同部分中,得到两个不同的结果.有一次是2254,另一次是2284.我可以查看内存布局,一个区域显示内部成员为字节对齐,另一个区域是字对齐.

我查看了dissasmbly并看到sizeof()值实际上是机器代码的一部分.这会是编译器或链接器中的错误吗?为什么同一个项目的两个部分以不同的方式查看同一个类?

编辑:

让我提供一个更清晰的例子,我刚刚跑来表明这不是ODR违规.

我刚刚创建了一个全新的课程

class TestAlignClass
{
public:  
    TestAlignClass() { }
    ~TestAlignClass() { }

private:
    char charArray[3];
    int myInt;
};
Run Code Online (Sandbox Code Playgroud)

如果类与4对齐,则应返回sizeof()= 8,这就是我想要的.但是我的代码中有某些类返回sizeof()= 7.

实际上,当我进入new()运算符时,有时它会分配7个字节,有时它会分配8个字节.

我将几个项目链接在一起,我认为它首先与项目设置有关,但同一项目的不同部分将显示差异.

c++ compiler-construction linker sizeof

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