小编kyb*_*kyb的帖子

所有重载方法的别名?

我有一个类Filter,它process为各种输入重载了方法.

template< typename T >
class Filter
{ 
public:
    void process(T arr[], size_t len);
    T process(T one_value);
    void process(std::array &arr);
    void process(std::vector &v);
    //... many other variants

    using operator() = process;  // How to write proper?
}
Run Code Online (Sandbox Code Playgroud)

我想简化用户代码省略process:filter.process(values)将成为filter(values).我不认为operator()为每个变体写一个重载是个好主意.必须存在更方便的解决方案吗?

c++ overloading

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

QtCreator qmake无法运行编译器“ cl”

刚刚使用MSVS 2017和Qt5.9.1配置了新的Windows环境。
在构建示例项目时bars遇到错误

Project ERROR: Cannot run compiler 'cl'. Maybe you forgot to setup the environment?
Run Code Online (Sandbox Code Playgroud)

使用mingw构建并运行良好。


我试图在qmake之前添加自定义构建步骤

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64
Run Code Online (Sandbox Code Playgroud)

但是得到了相同的结果。在cmd此命令中工作正常。之后就cl.exe可以到达了。


Qt自动发现了所有工具集,似乎是正确的


更新1。VS 2017内置开发人员命令提示符

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0.26730.16
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************

C:\Users\Admin\source>"C:\Devel\Qt\Qt5.9.1\5.9.1\msvc2017_64\bin\qmake.exe" C:\Devel\Qt\Qt5.9.1\Examples\Qt-5.9.1\datavisualization\bars\bars.pro -spec win32-msvc

C:\Users\Admin\source>nmake

Microsoft (R) Program Maintenance Utility Version 14.11.25508.2
Copyright (C) Microsoft Corporation.  All rights reserved.

        "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503\bin\HostX86\x86\nmake.exe" -f Makefile.Release

Microsoft …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt-creator visual-c++ visual-studio-2017

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

使用Boost Asio从串口读取

我想检查串口上的传入数据包,使用boost.asio.每个数据包将以一个字节长的标头开始,并指定已发送的消息类型.每种不同类型的消息都有自己的长度.我想写的函数应该不断地监听新的传入消息,当它找到它时应该读取它,并调用其他函数来解析它.我目前的代码如下:

void check_for_incoming_messages()
{
    boost::asio::streambuf response;
    boost::system::error_code error;
    std::string s1, s2;
    if (boost::asio::read(port, response, boost::asio::transfer_at_least(0), error)) {
        s1 = streambuf_to_string(response);
        int msg_code = s1[0];
        if (msg_code < 0 || msg_code >= NUM_MESSAGES) {
            // Handle error, invalid message header
        }
        if (boost::asio::read(port, response, boost::asio::transfer_at_least(message_lengths[msg_code]-s1.length()), error)) {
            s2 = streambuf_to_string(response);
            // Handle the content of s1 and s2
        }
        else if (error != boost::asio::error::eof) {
            throw boost::system::system_error(error);
        }
    }
    else if (error != boost::asio::error::eof) {
        throw boost::system::system_error(error);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++ serial-port streambuf boost-asio

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

如何防止 yq 删除注释和空行?

这里使用 yq 编辑数组中的 yaml 对象。加速 Terminalizer 的终端转换(记录)我问过如何用 yq 编辑 yaml。我得到了最好的答案。但默认情况下yq会删除注释和空行。如何防止这种行为?

input.yml

# Specify a command to be executed
# like `/bin/bash -l`, `ls`, or any other commands
# the default is bash for Linux
# or powershell.exe for Windows
command: fish -l

# Specify the current working directory path
# the default is the current working directory path
cwd: null

# Export additional ENV variables
env:
  recording: true

# Explicitly set the number of columns
# …
Run Code Online (Sandbox Code Playgroud)

comments jq yq

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

Why is the copy-ctor preferred over move-ctor when std::vector relocates storage?

I am learning the behavior of std::vector: how it relocates (copies/moves) objects when reserving more capacity:

#include<vector>
#include<iostream>
using namespace std;

struct A{
   A(const A& a){ i=a.i; cerr<<"copied "<<i<<endl; }  //(1)
   A(     A&& a){ i=a.i; cerr<<"moved "<<i<<endl; }
   A(int i):i(i){cerr<<"created "<<i<<endl;};
   A(){};
private:
   int i=0;
};
int main()
{
   vector<A> v1;
   size_t prevcap=v1.capacity();
   for(int i=0; i<10; ++i){
      v1.emplace_back(i);
      if(prevcap!=v1.capacity()){
         cerr<<"capacity increased to "<<v1.capacity()<<endl;
         prevcap=v1.capacity();
      }
      cerr<<"------"<<endl;
   }
}
Run Code Online (Sandbox Code Playgroud)

With my g++-10 the output is:

created 0
capacity increased to …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

6
推荐指数
0
解决办法
88
查看次数

来自本地文件夹的 git 子模块

有一个名为 的 git 存储库parent-repo。它有lib包含库的文件夹。'lib/one' 受parent-repo. 现在我想让 git 识别lib/oneparent-repo.

cd lib/one
git init
git add .
git commit -m 'first commit'
Run Code Online (Sandbox Code Playgroud)

我认为下一步是

  1. cd parent-repo
  2. 取消跟踪lib/one
  3. 注册lib/one为子模块
  4. 阶段并提交。

如果可能的话,请使用 git 命令清除后续步骤。

git git-submodules

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

加快Gitlab CI重用docker机器的阶段

Gitlab CI每次为每个任务(阶段)提取docker镜像.这个操作浪费了很多时间.我希望尽可能优化.

我看到两个可以使用的地方:
1.显式配置CI阶段以重用相同的docker机器.
2.在构建下一次提交时使用之前提交的docker机器?(如果配置文件中没有更改).

optimization gitlab docker gitlab-ci gitlab-ci-runner

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

GitLab:如何更改合并提交消息模板?

典型的消息如下所示:

Merge branch ‘mass-refactoring’ into ‘master’

Mass refactoring

See merge request group/project!13
Run Code Online (Sandbox Code Playgroud)

是否可以将模板更改为:?

HEADER

BODY

Merge branch SRC_BRANCH into TGT_BRANCH. See merge-request GROUP/PROJECT!N
Run Code Online (Sandbox Code Playgroud)

git gitlab

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

在Android Studio中使用CMake语法高亮和帮助程序

CLion得到了很好的支持CMake.它突出了语法并提供了建议.Android studio缺乏这个功能.有没有办法启用/添加它?

syntax-highlighting cmake android-studio clion

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

$QTDIR 指的是 Visual Studio 中的错误目录

我刚遇到一个问题,又花了几个小时。
我有一个依赖于Qt. 我刚刚安装了 Qt 5.9.1 但错误:

E1696   cannot open source file "QDir"  Logger  \Logger.cpp 3   
E1696   cannot open source file "QFile" Logger  \Logger.cpp 4   
E1696   cannot open source file "QString"   Logger  \Logger.cpp 5   
E1696   cannot open source file "QStringBuilder"    Logger  \Logger.cpp 6   
E1696   cannot open source file "QDateTime" Logger  c\Logger.cpp    7   
E1696   cannot open source file "QMessageBox"   Logger  \Logger.cpp 8   
E1696   cannot open source file "QApplication"  Logger  \Logger.cpp 9   
Run Code Online (Sandbox Code Playgroud)

仍然出现。为什么?

我尝试$(QTDIR)Properties Pages 中使用变量将 include …

c++ qt visual-studio

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