小编JSh*_*use的帖子

是否为每个不同大小的std :: array编译了一个全新的类?

据我了解,c ++模板通过为每种所需的类型编译一个单独的类或函数来工作。对于只需要少数几种不同类型/参数调用的类或函数来说,这似乎是合乎逻辑的,但是std::array似乎这可能导致同一类被编译成数百种不同版本。

我了解std::array过C样式数组的优点,但是如果我的上述假设正确的话,使用前者似乎会产生比后者更大的二进制大小。

例如,如果说在一个大型程序中,我们最终在整个代码中使用了99个大小不同的数组,那么我们实际上就有:

int arr[1]   = { ... }
int arr[2]   = { ... }
int arr[...] = { ... }
int arr[99]  = { ... }
int arr[100] = { ... }
Run Code Online (Sandbox Code Playgroud)

要么

 std::array<int, 1> arr   = { ... }
 std::array<int, 2> arr   = { ... }
 std::array<int, ...> arr = { ... }
 std::array<int, 99>  arr = { ... }
 std::array<int, 100> arr = { ... }
Run Code Online (Sandbox Code Playgroud)

std::array示例是否将整个类及其所有函数编译为二进制文件99次而结束?

c++ templates instantiation template-specialization

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

Qt Creator 在新项目中显示错误,但代码编译正常

上下文:我最近从 debian stable 切换到 debian testing,所以自从我上次使用 QT creator 以来我已经更新了数百个包。

当我在 QT creator 中创建一个新项目时,我收到了许多错误消息。

例如,以下是新项目中自动生成的 main.cpp 类的错误:

cstddef:50:10: fatal error: 'stddef.h' file not found
error: variable has incomplete type 'QApplication'
forward declaration of 'QApplication'
unknown type name 'MainWindow'
Run Code Online (Sandbox Code Playgroud)

当我打开我知道没有错误的以前的项目时,它们也会显示一大堆类似的错误。

但是,所有这些项目都可以正常构建和运行。

这是什么原因造成的?

c++ qt qt-creator

11
推荐指数
2
解决办法
1816
查看次数

在GTK4中制作一个可点击的框

我如何制作可gtk4::Box点击的gtk_rs

在 GTK3 中,似乎使用 anEventBox是实现此目的的方法,但是在 GTK4 中:

停止使用GtkEventBox

GtkEventBox不再需要并已被删除。

所有小部件都会接收所有事件。

https://docs.gtk.org/gtk4/migration-3to4.html#stop-using-gtkeventbox

所以看来点击处理程序现在应该直接附加到小部件。但是我找不到任何关于如何执行此操作的明确文档或示例。

如果有人能给我一个将点击侦听器附加到 a 的示例,gtk4::Box我将不胜感激。

gtk rust gtk-rs gtk4

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

Jenkins 声明式管道 - 根据工作区中命令运行的输出动态填充输入步骤的选择

我想创建一个输入步骤来提示用户选择 git 标签。为此,我想用 . 返回的值填充下拉框git tag

这是我当前的管道:

pipeline {
    agent any
    stages {
        stage('My Stage') {
            input {
                message "Select a git tag"
                parameters {
                    choice(name: "git_tag", choices: TAGS_HERE, description: "Git tag")
                }
            }
            steps {
                echo "The selected tag is: ${git_tag}"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望 TAGS_HERE 成为包含命令给出的输出的变量或方法git tags

到目前为止我已经尝试过:

  • 在上一步中将标签设置为环境变量 - 不起作用,因为由于某种原因这些变量在输入块中无法访问
  • 调用一个单独的 groovy 方法来运行命令并返回输出 - 不起作用,因为工作区丢失并且命令全部运行在/

我已经广泛搜索了解决方案,但我能找到的所有示例都通过专门使用脚本化管道步骤或使用不依赖于工作区的命令来避免这两个陷阱。

groovy jenkins jenkins-pipeline

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

如何获取宏中变量的名称和值?

是否可以创建一个 Rust 宏来访问作为参数传递的变量的名称和值?

let my_variable: i32 = 5;
printvar!(my_variable); // => to print "my_variable = 5"
Run Code Online (Sandbox Code Playgroud)

例如,对于 C 宏,我们可以使用#运算符:

#include <stdio.h>

#define PRINT_VAR(x) printf("%s = %d\n", #x, x);

 int main() {
    int my_variable = 5;
    PRINT_VAR(my_variable);
}
Run Code Online (Sandbox Code Playgroud)
$ ./a.out
my_variable = 5
Run Code Online (Sandbox Code Playgroud)

macros rust rust-macros

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