小编Kyl*_*and的帖子

创建函数别名

编辑:这个问题最初的标题是“使用std::bind创建内联函数”,但这并不是我真正想要的:我只是想要一个简单的方法来别名函数。

我想std::chrono::high_resolution_clock::now作为一个独立的函数公开。也就是说,我想做以下事情:

auto current_time = std::bind(std::chrono::high_resolution_clock::now);
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于这是在一个头文件中,它会导致current_time链接时的多个定义。有没有一种方法返回一个内联函数std::bind

c++ inline stdbind c++11

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

进程结束后QSerialPort对`/ dev/ttyS*`的影响?

当Qt app使用QSerialPort经历非干净关闭(例如由于接收和不处理SIGINT)时,串口的文件描述符如何受到影响?

在运行打开QSerialPorton 的应用程序/dev/ttyS0,然后退出之后Ctl-C,我发现它cat < /dev/ttyS0立即返回(没有打印任何内容)而不是等待数据(通常如此).

我希望如果这是由于一个打开的文件句柄左转,它会显示在输出中lsof,但lsof | grep ttyS0什么都不返回.(我不确定如何在特定文件描述符上搜索句柄.)

我意识到这是一个XY问题,因为我可以通过重写我的应用程序来正确处理来完全避免这个问题SIGINT,但我想更深入地了解这里发生了什么以及是否有办法恢复序列在它处于这种状态时的端口.


编辑:根据要求,这是输出strace cat /dev/ttyS0:

execve("/bin/cat", ["cat", "/dev/ttyS0"], [/* 17 vars */]) = 0
brk(0)                                  = 0x91ce000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76fb000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, …
Run Code Online (Sandbox Code Playgroud)

linux qt file-descriptor filehandle qtserialport

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

使用一个数字数据成员为类定义所有比较运算符的便捷方法?

如果我有一个由单个数字数据成员(例如,一个int)和各种方法组成的类型,是否有一种方便的方法来告诉编译器自动生成所有明显的比较运算符?

即,而不是这个(当然使用inline而不是constexprC++ 03):

class MyValueType
{
    private:
        int myvalue;
    public:
        constexpr bool operator<(MyValueType rhs) const { return myvalue < rhs.myvalue; }
        constexpr bool operator>(MyValueType rhs) const { return myvalue > rhs.myvalue; }
        constexpr bool operator>=(MyValueType rhs) const { return myvalue >= rhs.myvalue; }
        constexpr bool operator==(MyValueType rhs) const { return myvalue == rhs.myvalue; }
        /// .... etc
}
Run Code Online (Sandbox Code Playgroud)

我想要像Ruby的Comparable mixin这样的东西,它基本上允许你定义一个操作符,让Ruby来处理其余的操作.我甚至认为编译器生成的版本可能比我的更好:应该rhsconst每个案例的参考?我应该定义转发引用的版本吗?如果我忘了其中一个操作员怎么办?等等.

所以...这样的事情存在吗?

(请原谅我,如果这是重复的;我认为有人会在某个地方问这个,因为它似乎是一个明显的功能,但我找不到任何东西.)

编辑:自动生成比较运算符已被提议作为一项功能:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3950.html

c++ comparison-operators c++11

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

使用可变参数模板创建类似元组的编译时"链表"

我正在思考可能的实现std::tuple(和任何类似的模板类,在编译时定义了可变数量的"成员"),我想也许可以创建一个类似于链表的"递归类型".我尝试编译以下测试用例:

template <typename FirstType, typename... OtherTypes>
class TupleLite
{
  public:
    FirstType type_;
    TupleLite<OtherTypes...> other_types_;
};

int main()
{
  TupleLite<int,double> mytuple;
}
Run Code Online (Sandbox Code Playgroud)

类本身编译时没有错误,但实例化会抛出错误wrong number of template arguments (0, should be 1 or more).我相信这是因为TupleLite<int, double>尝试实例化a TupleLite<double>,它试图实例化a TupleLite<>,没有有效的定义.

这个"递归大小的班级"可以被抢救吗?我尝试定义如下的"无争论专业化" TupleLite:

template <>
class TupleLite {}
Run Code Online (Sandbox Code Playgroud)

....但这似乎不起作用,虽然g++并且clang++似乎在确切原因上存在分歧.

从中g++,最相关的错误似乎是:

error: template specifiers not specified in declaration of ‘template<class FirstType, class ... OtherTypes> class TupleLite’
  class TupleLite
        ^
error: wrong number …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11

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

CMake add_compile_options 是否会在适当的时候影响链接器选项?

某些编译器选项实际上可能需要额外的链接选项才能真正有效。例如,要启用GCC 的链接时间优化,必须在编译命令链接命令-flto中都传递该选项。

有一个用于添加编译选项的漂亮内置cmake命令,但据我所知,没有相应的链接选项命令。即使有,当我使用的编译选项暗示它们时,需要显式指定它们也会非常烦人。

那么add_compile_options(-flto)add-fltolink命令呢?如果没有的话需要set(LINK_FLAGS ....直接去吗?

c++ gcc cmake

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

nullglob 禁用路径名制表符补全

我发现这shopt -s nullglob显然禁用了文件和目录的制表符完成,并shopt -u nullglob恢复了它。为什么目录的制表符完成显然依赖于nullglob未设置?

4.2.37(1)-release在 Debian 7 上使用 Bash 。

bash glob autocomplete bash-completion shopt

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

QML属性临时值,而不会完全破坏绑定

在QML中(至少在5.6 1版之前),一旦在JavaScript上下文中分配了新值,属性绑定就会中断:

Item {
    property bool sourceBool: <some changing value e.g. from C++ code>
    property bool boundBool: sourceBool

    function reassignBool() {
        boundBool = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦reassignBool被调用,boundBool将是true不管的状态sourceBool

我希望能够为不会破坏原始绑定的属性分配一个临时值;临时值将一直存在,直到NOTIFY触发了与原始绑定关联的任何信号为止,此时绑定属性将再次反映绑定计算出的值。

作为一个示例用例,假设我有一个我不希望用户连续按下两次的按钮,并且该按钮根据某些规则启用或禁用:

MyButton {
    id: onceOnlyButton
    // Suppose the QML type `MyButton` provides a boolean property
    // called `enabled` that greys out the button and prevents it from
    // being clicked when `false`.
    enabled: <condition1> && <scondition2>
    onClicked: {
        <schedule some asynchronous …
Run Code Online (Sandbox Code Playgroud)

qt qml property-binding

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

在后续版本中保存并重新打印成功编译文件的警告?

重复构建项目时,如果翻译单元中存在警告但没有错误,则通常不会重新编译主源文件.

这可能使得难以通过错误警告来尝试在没有警告的情况下构建项目.通常,必须保持迭代构建直到所有错误都得到处理,然后进行全面清理并构建以确保没有警告(以及确保先前完成的构建不是由剩余引起的"侥幸"构建工件).

是否有任何方法使用CMake(或其他一些实用程序,如Bash脚本)来解析警告的构建输出,将它们保存在某个文本文件中,然后在后续构建中重新显示它们?

对于奖励积分,因为我正在为我的编译器输出着色,是否可以使用颜色控制字符保存警告并使用相同的颜色重新显示?

(如果重要的是,目前我只编译C++,而且我通常使用GCC这样做.我选择的构建生成器是Ninja,我有一些我编写的Bash脚本将我的所有调用都包含在内CMake和Ninja.)

compilation build cmake compiler-warnings

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

Jenkins在安装插件后将无法启动*并且不会记录任何内容*

我安装了Jenkins的Gradle插件,并通过Jenkins Web界面使用了自动重启选项。Jenkins似乎挂在“正在重新启动...”页面上,因此我最终尝试使用手动在服务器(64位Debian 7)上重新启动Jenkins服务service jenkins restart

现在,詹金斯(Jenkins)完全不再运行(已通过ps -ef | grep -i [J]enkins和验证service jenkins status),当我尝试时service jenkins [re]start,我看到一条[ ok ]消息,但似乎什么也没有发生。我已经删除了/var/log/jenkins/jenkins.log,并且每次尝试执行service start(或重新启动)时,都会重新出现该日志文件,但是该日志文件为空白(ls -lA表明该文件是最近制作的,但是cat没有输出)。我也尝试过重启服务器,但没有任何效果。我终于删除了Gradle下的文件夹/var/lib/jenkins/plugins,这似乎也没有影响。

我什至如何开始解决这个问题?我应该重新安装Jenkins吗?

编辑:系统信息:

> uname -a
Linux AUC-Workstation1 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

据介绍dpkg -l,我正在使用Debian的jenkins软件包version 1.617

编辑2:jenkins按照这里的说明,我实际上是在使用Jenkins直接提供的软件包。

debian jenkins

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

以编程方式获取git中的stas数

我项目中"最古老的"藏匿是我需要不时重新申请的东西.(是的,这是有原因的,是的,这很糟糕,但修复底层问题比git stash现在使用更耗时.)

但是,最旧的存储在列表中具有最高编号,因此我不能在不首先使用它git stash list来查看它的数字的情况下应用它.

有没有办法让Git打印出它当前持有的stashes数量,所以这样的东西总会打印出最后一个stash(在支持这种命令插值的shell中)?

git stash apply $(git stash <count-command>)
Run Code Online (Sandbox Code Playgroud)

我意识到我可以使用这样的东西:

 git stash list | tail -1 | awk '{print $1}' | grep -oP '\d+'
Run Code Online (Sandbox Code Playgroud)

......但这很可怕,所以我想知道是否有更简单的东西.

git shell git-stash

4
推荐指数
2
解决办法
125
查看次数