这是我不理解的代码:
class Base
{
public:
Base(){}
Base operator=(Base ob2)
{
std::cout << "Using Base operator=() " << '\n';
return *this;
}
};
class Derived : public Base
{
public:
Derived(){}
Derived operator=(Base ob2)
{
std::cout << "Using Derived operator=() " << '\n';
return *this;
}
};
int main()
{
Derived derived1, derived2;
Base base1;
derived1 = derived2; // Uses base operator=()
derived1 = base1; // Uses derived operator=()
return 0;
}
Run Code Online (Sandbox Code Playgroud)
确定的第一个赋值使用Base类的运算符,第二个赋值使用Derived类的运算符的语言规则是什么?
是的,我知道通常不会像这样声明赋值运算符.这就是为什么我称它为accademical.
在我的jenkins管道文件中,我使用从.json文件JsonSlurperClassic中读取构建配置.但是,这会引入需要通过进程内脚本批准页面批准的代码.当我在GUI上执行此操作时,此工作正常.
但是我还有一个脚本可以自动设置我的jenkins机器,它应该创建一个不需要进一步GUI操作的现成工作机器.此脚本已使用jenkins脚本控制台批准从属启动命令.在脚本控制台中执行此操作的groovy代码如下所示.
def language = 'system-command';
def scriptSnippet = 'ssh me@slavemachine java -jar ~/bin/slave.jar';
def scriptApproval = Jenkins.instance.getExtensionList(
'org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0];
def scriptHash = scriptApproval.hash(scriptSnippet, language);
scriptApproval.approveScript(scriptHash);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在我想使用相同的代码来批准来自我的管道的脚本片段.我交换了前两行
def language = 'groovy'
def scriptSnippet = 'new groovy.json.JsonSlurperClassic';
Run Code Online (Sandbox Code Playgroud)
其中,scriptSnippet从所拍摄的scriptApproval.xml文件.执行此操作会<approvedScriptHashes>向scriptApproval.xml文件添加新条目,但不会删除<pendingSignature>包含脚本片段的条目.这意味着它不起作用.
我的猜测是,这种语言是错误的,但我试过的其他价值观groovy-sh或者system-commands也没有用.你有什么想法它不起作用吗?
感谢您的时间.
我最近开始尝试clang-tidyllvm 的工具.现在我试图压制来自第三方库代码的错误警告.为此,我想使用命令行选项
-header-filter=<string> 要么 -line-filter=<string>
但到目前为止没有成功.所以对于时间有限的人,我会在开头提出这个问题,然后再解释我已经尝试过的问题.
我需要为clang-tidy工具提供什么选项来抑制来自某个行和文件的警告?
如果这是不可能的
什么选项可以抑制外部头文件的警告?
我对clang-tidy的原始调用看起来像这样
clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p Generated/LinuxMakeClangNoPCH Sources/CodeAssistant/ModuleListsFileManipulator_fixtures.cpp
Run Code Online (Sandbox Code Playgroud)
我要压制的产生警告的第一行看起来像这样
.../gmock/gmock-spec-builders.h:1272:5: warning: Use of memory after it is freed [clang-analyzer-cplusplus.NewDelete]
return function_mocker_->AddNewExpectation(
Run Code Online (Sandbox Code Playgroud)
gmock人告诉我,这是一个误报,所以我想压制它.首先,我尝试使用该-line-filter=<string>选项.文件说:
-line-filter=<string> - List of files with line ranges to filter the
warnings. Can be used together with
-header-filter. The format of the list is a JSON
array of objects:
[
{"name":"file1.cpp","lines":[[1,3],[5,7]]},
{"name":"file2.h"}
]
Run Code Online (Sandbox Code Playgroud)
我假设过滤掉了给定行中的警告.但doc doesent表示如果它们被过滤掉或者已经过滤了.在一些fiddeling arround之后我创建了一个包含内容的.json文件
[
{"name":"gmock-spec-builders.h","lines":[[1272,1272]]}
]
Run Code Online (Sandbox Code Playgroud)
并将命令行修改为
clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p …Run Code Online (Sandbox Code Playgroud) 有时我会得到一个属于包的导入目标列表.是否有一个包含它们的变量?
这将允许我写这样的东西
find_package(Qt5 CONFIG REQUIRED)
message("Imported Qt5 targets: ${Qt5_IMPORTED_TARGETS}") # speculative code
Run Code Online (Sandbox Code Playgroud)
根据我目前的知识,我必须依赖包的文档来给我所有导入目标的名称.从变量或属性中读取它们会更容易.
我想通过ssh访问我的github存储库.当我第一次访问存储库时,系统会询问是否要将github ssh服务器添加到我的known_hosts文件中,这样可以正常工作.该请求也让我发现服务器的RSA密钥的指纹,我可以手动验证它是由github上提供的相同位置.
这些是OpenSSH 6.8和更新版本(以base64格式)显示的SHA256哈希:
SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 (RSA)
SHA256:br9IjFspm1vxR3iA35FWE+4VTyz1hYVLIE2t1/CeyWQ (DSA)
Run Code Online (Sandbox Code Playgroud)
问题是我想known_hosts在第一次访问我的git存储库之前通过向我的文件添加公钥来阻止该请求.这可以通过使用ssh-keyscan -t rsa www.github.com命令来完成,该命令将以known_hosts文件所需的格式提供公钥.但人们反复提到,这不安全,容易受到中间人攻击.他们没有提到的是如何正确地做到这一点.
那么如何使用github页面上提供的RSA指纹安全地获取ssh服务器的公共主机密钥呢?我或多或少地寻找一个ssh-keyscan命令的选项,让我添加预期的rsa指纹,并导致命令失败,如果主机指纹与给定的指纹不匹配.
感谢您的时间!
这个问题或多或少是这个问题的热身:
它从来没有得到有效的答案,所以我想稍微改变它:
是否可以使用cmake 2.8.3引入的cmake解决方案文件夹将文件直接添加到vs解决方案?我想做相当于VS-> Solution-> Add-> Existing Item的cmake.因此,我的文件将出现在属于解决方案的文件夹中,而不是项目中.
我找到了一些示例,如何使用解决方案文件夹将目标分组到文件夹中,代码如下:
set_property( GLOBAL PROPERTY USE_FOLDERS ON)
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test")
Run Code Online (Sandbox Code Playgroud)
那么我可以在文件夹中添加文件而不是目标吗?
我在初始化列表中使用QString时遇到了访问冲突,我不明白.
这是一个重现问题的最小例子.
// file ClassA.h
#pragma once
#include <QString>
struct Parameter
{
QString stringPar;
};
class ClassA
{
QString m_string1;
public:
void function(Parameter pars);
};
Run Code Online (Sandbox Code Playgroud)
ClassA的实施......
// file ClassA.cpp
#include "ClassA.h"
void ClassA::function(Parameter pars)
{
m_string1 = pars.stringPar; // last line called in my code when the crash happens
}
Run Code Online (Sandbox Code Playgroud)
和main.cpp
// file main.cpp
#include "ClassA.h"
int main()
{
ClassA classA;
classA.function({ QString("jkjsdghdkjhgdjufgskhdbfgskzh") });
// when using this code the problem does not occur
//Parameter par = { QString("jkjsdghdkjhgdjufgskhdbfgskzh") }; …Run Code Online (Sandbox Code Playgroud) 我正在使用以下命令行调用在jenkins CLI服务器上执行groovy脚本:
curl --user 'Knitschi:myPassword' -H "Jenkins-Crumb:1234" --data-urlencode "script=println 'Hello nice jenkins-curl-groovy world!'" localhost:8080/scriptText
Run Code Online (Sandbox Code Playgroud)
我目前正在将bash脚本转换为python,我想使用python 请求包(http://docs.python-requests.org/en/master/)做与上述调用等效的操作。
到目前为止,我有
import requests
url = 'http://localhost:8080/scriptText'
myAuth = ('Knitschi', 'myPassword')
crumbHeader = { 'Jenkins-Crumb' : '1234'}
scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"
response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()
Run Code Online (Sandbox Code Playgroud)
当命令行打印期望的字符串时,python代码不会。它也不会引发异常。
另外,我不确定是否应该使用requests.get()或requests.post()。我的网络技术知识非常有限。
感谢您的时间。
我试图用CMake添加一个自定义目标,为每个给定的.cpp文件执行一个命令.只有在源文件本身或其中一个包含的源文件发生更改时,才应重新执行该命令.AFAIK实现这一点我需要一个包含所有包含文件的列表,并将它们添加到属于我的自定义目标DEPENDS的add_custom_command()调用选项中.
那么是否有内置的方法来获取包含文件的列表?
我知道函数的IMPLICIT_DEPENDS选项,add_custom_command()但它只适用于Makefile生成器.我想为所有发电机做这项工作.
感谢您的时间
编辑:
根据要求,我将发布一些cmake代码来展示我想要实现的目标.我想添加一个自定义目标,在所有给定的.cpp文件上运行clang-tidy.当逐步构建自定义目标时,只要更改.cpp文件或其直接或间接包含的头文件之一,就应重新运行clang-tidy命令.就像重新运行编译器一样.
# ----------------------------------------------------------------------------------------
# mainTargetName The name of the target that shall be analyzed
# files A list of all the main targets .cpp files
#
function( addStaticAnalysisTarget mainTargetName files )
set(targetName runStaticAnalysis_${mainTargetName})
set(command "clang-tidy-4.0 -checks=* -p ${CMAKE_BINARY_DIR}")
foreach( file ${files} )
get_filename_component( baseName ${file} NAME_WE)
set(stampFile ${CMAKE_CURRENT_BINARY_DIR}/analyze_${baseName}.stamp )
set(fullFile ${CMAKE_CURRENT_SOURCE_DIR}/${file})
set(commandWithFile "${command} ${fullFile}")
separate_arguments_for_platform( commandList ${commandWithFile})
add_custom_command(
OUTPUT ${stampFile}
DEPENDS "${fullFile}"
IMPLICIT_DEPENDS CXX "${fullFile}"
COMMAND ${commandList} …Run Code Online (Sandbox Code Playgroud) 我想添加一个 cmake 自定义命令,该命令仅在使用 Visual Studio 多配置生成器时在调试配置中构建自定义目标时才执行。有没有干净的方法来做到这一点?
为了实现这一点,我首先尝试将整个命令列表包装在这样的生成器表达式中。
add_custom_command(
...
COMMAND $<$<CONFIG:Debug>:cmake;-E;echo;foo>
)
Run Code Online (Sandbox Code Playgroud)
但这在执行命令时给了我一个语法错误。经过一些反复试验,我得到了以下hacky解决方案。这将命令列表的每个单词包装在这样的生成器表达式中。
add_custom_command(
...
COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)
Run Code Online (Sandbox Code Playgroud)
这会cmake -E echo foo在编译 Debug 配置时执行该命令,并echo " " " " " "为所有其他配置执行 dummy 命令。
这非常难看,必须根据主机系统更改虚拟命令。在 Linux 上它可能是":" ":" ":" ":". 那么有没有更干净的方法来做到这一点?
感谢您的时间!
c++ ×4
cmake ×4
jenkins ×2
clang-tidy ×1
github ×1
openssh ×1
package ×1
qt ×1
ssh ×1
visual-c++ ×1