小编Gab*_*ers的帖子

如何在C++中使用枚举

假设我们有enum以下内容:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
Run Code Online (Sandbox Code Playgroud)

我想创建一个这样的实例enum并用适当的值初始化它,所以我做:

Days day = Days.Saturday;
Run Code Online (Sandbox Code Playgroud)

现在我想用现有enum值检查我的变量或实例,所以我这样做:

if (day == Days.Saturday)
{
    std::cout << "Ok its Saturday";
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个编译错误:

错误:'.'之前的预期primary-expression 代币

所以要说清楚,说:有什么区别:

if (day == Days.Saturday) // Causes compilation error
Run Code Online (Sandbox Code Playgroud)

if (day == Saturday)
Run Code Online (Sandbox Code Playgroud)

这两个实际上是指什么,一个是好的,一个导致编译错误?

c++ enums

202
推荐指数
9
解决办法
40万
查看次数

PyQt ProgressBar

使用以下代码时,我的应用程序会在几秒钟后停止.摊位我的意思是挂起.我从Windows得到一个窗口,说等待或强制关闭.

我可能会补充说,只有当我在进度条窗口内单击或者单击它外部时它才会失去焦点.如果我开始这个例子并且不触摸任何东西它就会像它应该的那样工作.

from PyQt4 import QtCore
from PyQt4 import QtGui


class ProgressBar(QtGui.QWidget):
    def __init__(self, parent=None, total=20):
        super(ProgressBar, self).__init__(parent)
        self.name_line = QtGui.QLineEdit()

        self.progressbar = QtGui.QProgressBar()
        self.progressbar.setMinimum(1)
        self.progressbar.setMaximum(total)

        main_layout = QtGui.QGridLayout()
        main_layout.addWidget(self.progressbar, 0, 0)

        self.setLayout(main_layout)
        self.setWindowTitle("Progress")

    def update_progressbar(self, val):
        self.progressbar.setValue(val)   
Run Code Online (Sandbox Code Playgroud)

像这样使用:

app = QtGui.QApplication(sys.argv)
bar = ProgressBar(total=101)
bar.show()

for i in range(2,100):
    bar.update_progressbar(i)
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

python qt multithreading pyqt qprogressbar

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

C++ 测试两个 DLL 是否共享同一堆

众所周知,堆内存的释放必须使用与分配它的分配器相同的分配器来完成。在跨 DLL 边界交换堆分配的对象时需要考虑这一点。

一种解决方案是为每个对象提供一个析构函数,就像在 C API 中一样:如果 DLL 允许创建对象 A,则它必须提供一个函数A_free或类似的东西1

另一个相关的解决方案是将所有分配包装到其中,因为它们存储到释放器2shared_ptr的链接。

另一种解决方案是将顶级分配器“注入”到所有加载的 DLL(递归地)3中。

另一种解决方案是不交换堆分配的对象,而是使用某种协议4

另一种解决方案是绝对确保 DLL 将共享相同的堆,如果它们共享兼容的编译选项(编译器、标志、运行时等),则应该(将会?)发生这种情况5 6。这似乎很难保证,特别是如果人们想使用包管理器而不是立即构建所有内容。

有没有办法在运行时检查多个 DLL 之间的堆实际上是否相同,最好以跨平台的方式?

为了可靠性和易于调试,这似乎比希望应用程序立即崩溃而不是默默地破坏东西更好。

c++ dll memory-management heap-memory shared-libraries

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

如何使用“git apply”使补丁忽略文件索引?

我正在尝试将 .patch 文件应用到我的源代码,但它失败了,因为我的文件索引 (10655) 比补丁索引 (10755) 旧。

现在我知道我可以修改补丁的文件索引,但我想知道是否有任何方法使用 git 使补丁忽略文件索引差异?

git command git-index git-apply

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

来自守护程序的错误响应:hcssshim::CreateComputeSystem:不支持该请求

docker: Error response from daemon: hcsshim::CreateComputeSystem 38d5975c4992c39b5ee8f5a46ad19f45435ff59b18523e3552c53b24ab23f1ca: The request is not supported.
(extra info: {"SystemType":"Container","Name":"38d5975c4992c39b5ee8f5a46ad19f45435ff59b18523e3552c53b24ab23f1ca","Owner":"docker",
"IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\\ProgramData\\Docker\\windowsfilter\\38d5975c4992c39b5ee8f5a46ad19f45435ff59b18523e3552c53b24ab23f1ca",
"Layers":[{"ID":"6658b069-0c9a-5796-8dd4-df51d8e89bf3","Path":"C:\\ProgramData\\Docker\\windowsfilter\\e984e14da4691b4ca5782a9c4b4af88a17db410424d2632d157a261b8d2cd918"},
{"ID":"7b2926d2-514d-5e06-82e3-f9a726c336a6","Path":"C:\\ProgramData\\Docker\\windowsfilter\\d239cc65931aeaa6443dd51452405e442baf32447515ecb3b19aee1a86b3e616"},
{"ID":"f87666ff-622a-57ae-a59c-935bcbd517ab","Path":"C:\\ProgramData\\Docker\\windowsfilter\\c09e132f538143279663778ef82c57af1d1d9af79f47963bf1e543919e9e363e"},
{"ID":"04ca5ecc-0c68-586c-baf1-85fbc7dae2ed","Path":"C:\\ProgramData\\Docker\\windowsfilter\\110cc8554b1db358e3394b0aecbbbf17135775eaabd7e19587bcc081a146dc3f"},
{"ID":"4d028b02-ef55-5ef6-9418-27439f950375","Path":"C:\\ProgramData\\Docker\\windowsfilter\\c4b0fef4a4f026def338d79ba686f3838e9d217f79ed8b5f0a10edf911ee2312"},
{"ID":"6f35449b-a2ff-50a1-9a4a-bb57e59dcd54","Path":"C:\\ProgramData\\Docker\\windowsfilter\\34aa11cc4d8dd2044c5674e4f76ab7766289bf5a7fac0db10b5f3b165bcc7621"},
{"ID":"ccbb1200-37f1-53b2-ab77-0e80099c90e7","Path":"C:\\ProgramData\\Docker\\windowsfilter\\7ff5467f7724bfc90ece4ef3001a186b7fd047d474ffae7e0d51ca351b746eab"},
{"ID":"d4312109-22d8-55e2-a97e-e676cbdd3f81","Path":"C:\\ProgramData\\Docker\\windowsfilter\\3439d5d471045fc013503367e69e349ee4210f5802a8517c999d4be118c99c4a"},
{"ID":"14f30d2a-c510-5be8-a7cd-2d4984c1b10b","Path":"C:\\ProgramData\\Docker\\windowsfilter\\987438c0b2a45e8aafea8858933f8ba4b87ec34ee53ffea747acb30169f180a7"},
{"ID":"d14333f6-a148-555b-a891-db7b0ff9814f","Path":"C:\\ProgramData\\Docker\\windowsfilter\\9bc15a6f050a3708d37f562ab973e9e6db7d136c592f5dc07201ca66ede2d614"},
{"ID":"a04c176c-27f5-557f-87f1-6dcd9beab874","Path":"C:\\ProgramData\\Docker\\windowsfilter\\9f413da158b62b375939235fa7a1529069d5a711beffb69a814663145fc276f9"},
{"ID":"95f19e14-436b-5e5f-9fd6-997b9ad17a8e","Path":"C:\\ProgramData\\Docker\\windowsfilter\\8f3913fbde770ec14c8af226501fb4af3bdde356c7e3de1b6cd5a3a48544f2b6"}],
"HostName":"38d5975c4992","HvPartition":true,"EndpointList":["8dbee51c-78ac-4bf7-8d7b-42cbf1485fdc"],"HvRuntime":{"ImagePath":"C:\\ProgramData\\Docker\\windowsfilter
\\9f413da158b62b375939235fa7a1529069d5a711beffb69a814663145fc276f9\\UtilityVM"},"AllowUnqualifiedDNSQuery":true}).
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上述问题。操作系统:Windows 10 Home(启用 Hyper-v、启用虚拟化、Docker 桌面已启动并运行)

当我尝试运行我的 docker 镜像 ( docker run -p 8085:8085 app) 时,我遇到了上述问题。

我已经在 github 中提出了一个问题(https://github.com/moby/moby/issues/41998)同时有人可以帮忙吗?

windows docker windows-container

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

禁用单个 git 命令的钩子

鉴于我需要在我的钩子脚本中使用 git,我希望我的钩子脚本不要自己触发钩子。所以我想在每个命令的基础上跳过钩子。

即我正在寻找一个选项,如:

git --no-hooks some-git-command

git hook command-line-interface

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

OpenCV-校准鱼眼镜头误差(病态矩阵)

我正在尝试按照以下说明校准鱼眼镜头 https://medium.com/@kennethjiang/calibrate-fisheye-lens-using-opencv-333b05afa0b0 ,在这里您可以找到我用于校准部件的完整代码。

我到了这里:

N_OK = len(objpoints)
K = np.zeros((3, 3))
D = np.zeros((4, 1))
rvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)]
tvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)]  
rms, _, _, _, _ = \
    cv2.fisheye.calibrate(
        objpoints,
        imgpoints,
        gray.shape[::-1],
        K,
        D,
        rvecs,
        tvecs,
        calibration_flags,
        (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-3)
    )
print("Found " + str(N_OK) + " valid images for calibration")
print("DIM=" + str(_img_shape[::-1]))
print("K=np.array(" + str(K.tolist()) + ")")
print("D=np.array(" + str(D.tolist()) + ")")
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback …
Run Code Online (Sandbox Code Playgroud)

python opencv

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

链接带有重音符号的文件夹中的.avi文件时出错

我有一个.avi文件,该文件位于服务器的文件夹中。该文件夹的名称带有重音符号。关键是,当我将该文件放入标签中时,它显示了一个txt文件(avi文件编码,我认为),这显然是错误的。它只是在具有https协议的Internet Explorer(至少为版本11)中发生。

对于mp4文件,在“非重音文件夹”中的avi文件,在http协议中都没有,在我直接在浏览器中粘贴地址时(无论是Chrome还是Firefox)都没有这种情况。

示例来说明我要说的内容:

<a href="https://myserver.com/myAccentédFolder/myVid.avi" target="_blank">ERROR</a>
<a href="https://myserver.com/myNonAccentedFolder/myVid.avi" target="_blank">OK 1</a>
<a href="https://myserver.com/myAccentédFolder/myVid.mp4" target="_blank">OK 2</a>
<a href="http://myserver.com/myAccentédFolder/myVid.avi" target="_blank">OK 3</a>
Run Code Online (Sandbox Code Playgroud)

所以我知道如何“修复”它……但是,如果我需要所有的工具,该怎么办?-使用IE 11-文件为.avi-带有重音符号的文件夹-地址为链接内的地址-地址为https协议

%$&$%发生了什么?

html https urlencode mime-types internet-explorer-11

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

Makefile:重用配方中模式规则的%值

在Makefile中我有:

images/schematic.pdf:images/schematic.svg

  inkscape -D -z --file=$^ --export-pdf=$@ --export-latex

  sed -i "s:schematic:images/schematic:g" $@_tex
Run Code Online (Sandbox Code Playgroud)

这条规则的作用是:

  • 使用inkscape转换为可用于乳胶的.pdfPDF文件及其相应的.pdf_tex文本文件(请参阅此答案:https://tex.stackexchange.com/a/2107/104581)
  • 修改提到的.pdf_tex文件,以便它不会破坏"更高"目录中的乳胶编译(即..pdf_tex文件在时./images)

我的问题:

我有很多这种形式的规则,即只有schematic改变的地方.我想用一个模式规则替换schematic%.并%在配方中使用(在sed命令中).

但是规则:

images /%.pdf:images /%.svg

  inkscape -D -z --file=$^ --export-pdf=$@ --export-latex

  sed -i "s:%:images/%:g" $@_tex
Run Code Online (Sandbox Code Playgroud)

不起作用:%在食谱中按字面解释.

我还尝试用$%替换配方中的%,但这个变量似乎是空的.

不满意的解决方案:

在配方中添加一行来创建一个(make)变量,该变量将保存结果notdir(removeprefix($<))(使用此问题或调用bash,因为GNU Make中没有removeprefix).

makefile code-cleanup pattern-matching gnu-make

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

.clangd:根据文件扩展名使用不同的编译器标志

我正在使用.clangd配置文件将编译标志传递给 clangd。

我在包含 C 和 C++ 文件的代码库上运行 clangd。

如何让一些标志应用于 C++ 文件而不是 C 文件?

c c++ configuration compiler-flags clangd

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

VTK Python 将相机的鼠标控制更改为轨迹球(类似于 Blender、Meshlab、CloudCompare)

如果您查看VTK wiki上提供的 Python 示例,您会发现大多数(全部?)查看者的鼠标控制可能会感觉很奇怪。例如,在 Cylinder Hello 世界中,对象移动的方向取决于您在窗口中单击的位置(无论对象位于何处)。旋转功能类似,其速度与距窗口中心的距离成正比。

是否可以将相机控制方式更改为“轨迹球”?即更接近 Blender、Meshlab 或 CloudCompare 的行为...

python mouse user-interface vtk

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

使用“预签名 URL”下载 Backblaze B2

情况:我在网络中运行一个 Django 应用程序,登录用户还可以下载 .pdf 文件(非公开,有特定限制,具体取决于用户权限)。最方便的方法(例如在 S3 中)是使用有时间限制的预签名 URL,因为它们会立即在浏览器中打开,而且应用程序服务器无需处理额外的流量。

问题:Backblaze B2 显然没有提供明确的方法来创建预签名 URL 以直接在浏览器中下载非公开文件。生成 api URL 和授权令牌以及从对象存储中获取文件发生在应用程序服务器级别,并且该过程不会向“普通”用户公开。

但最终,API 操作“b2_download_file_by_name”仅使用 GET 请求,这意味着我可以使用“?Authorization=123xyz........”将授权令牌添加到请求的 URL。这样我就可以获得一个在浏览器中完美运行的预签名 URL,以允许在有限的时间内访问特定的非公开文件。(请注意:B2 下载可以限制为具有特定前缀的文件 [如 s3 伪文件夹],但如果指定的“前缀”足够长,我可以使身份验证令牌特定于一个文件。)

问题:正如我上面所写,通常授权令牌不会暴露给用户。现在,如果我使 URL 可见,这是否意味着存在安全风险?换句话说,拥有一个或多个令牌的用户是否可以从令牌中提取通用访问密钥,或者令牌是否加密得足以避免这种情况?

pre-signed-url backblaze

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