小编Bra*_*rad的帖子

如何处理void decltype();

我想创建一个模板,该模板在另一个返回与成员函数相同类型的对象上调用成员函数.在成员函数上使用decltype的语法有点难看,但它似乎在除了一个之外的每种情况下都有效.

这是电话:

struct container: map<string, C> 
{
    template< typename MemFnPtrType, typename... _ArgTypes>
    auto safeOperation(string key, MemFnPtrType mfp, _ArgTypes&&... args )
        -> decltype( (((C*)nullptr)->*mfp)(args...))
    {
        C* pC = NULL;
        decltype((pC->*mfp)(args...)) result;

        iterator it = find(key);
        if (it != end())
        {
            C* pC = &(it->second);
            result = (pC->*mfp)(args...);
            cout << "result:" << result << "\n";
        }
        else
        {
            cout << "key: " << key << " missing\n";
        }
        return result;
    }
};
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,直到成员函数返回void.

有没有办法检测到这一点,并忽略了有问题的线?

我显然可以创建一个voidSafeOperation函数.我不介意创建另一个模板,但我想使用相同的名称"safeOperation",因此调用站点不需要根据成员函数的返回类型使用不同的帮助程序.

谢谢!

完整示例:http: //cpp.sh/7ft

c++ templates c++11

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

python3打印到字符串

使用Python 3,我有一个控制台应用程序,我正在移植到GUI.代码有一堆打印语句,如下所示:

print(' ', 'p', ' ', sep='', end='')

(实际上,位置参数实际上是从函数返回的,并且可能有多于或少于3,如下所示:

print(f1(), f2(), f3(), sep='', end='')

我想将这些调用转换为:

GuiPrintLine(' ', 'p', ' ', sep='', end='')

其中每一行最终使用GUI框架呈现.

如果我可以将参数转换为字符串,这很容易做到.我想将参数列表格式化为单个字符串,打印通常会输出如下:

def GuiPrintLine(*args, **kwargs):
    s = text.format(*args, **kwargs)
    # ... then display the string on the gui ...
Run Code Online (Sandbox Code Playgroud)

但是,这需要格式字符串(文本).有一种简单的方法可以自动生成与打印功能相同的输出吗?我意识到我可以通过用sep和end结束所有args来模拟打印,但我更愿意使用内置的解决方案(如果有的话).

使用打印和重定向sysout是不具吸引力的,因为它需要修改应用程序的全局状态,sysout可能同时用于其他诊断.

看起来这在Python中应该是微不足道的,所以也许我只是遗漏了一些明显的东西.

谢谢你的帮助!

python string stringio python-3.x

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

bitbake没有找到更新的食谱

我试图在现有的OE环境中包含当前yocto版本的升级的autotools而不升级我现有的所有包,所以我在我的conf文件中添加了yocto作为一个层:

BBLAYERS += " \
...
        ${OEBASE}/sources/meta-yocto/meta \
...
        ${OEBASE}/sources/oe-core/meta \
Run Code Online (Sandbox Code Playgroud)

在最初的oe-core层,我有automake_1.12.3:

../sources/oe-core/meta/recipes-devtools/automake/
??? automake
?   ??? path_prog_fixes.patch
?   ??? prefer-cpio-over-pax-for-ustar-archives.patch
?   ??? py-compile-compile-only-optimized-byte-code.patch
?   ??? python-libdir.patch
??? automake_1.12.3.bb
??? automake.inc
Run Code Online (Sandbox Code Playgroud)

在yocto层:

../sources/meta-yocto/meta/recipes-devtools/automake/
??? automake
?   ??? buildtest.patch
?   ??? py-compile-compile-only-optimized-byte-code.patch
?   ??? python-libdir.patch
??? automake_1.14.1.bb
??? automake.inc
Run Code Online (Sandbox Code Playgroud)

但是,bitbake只找到版本1.12.3:

$ bitbake -s | grep automake
automake                                           :1.12.3-r2                          
automake-native                                    :1.12.3-r2                          
nativesdk-automake                                 :1.12.3-r2  
Run Code Online (Sandbox Code Playgroud)

但是,我确信图层配置和路径是正确的,因为如果我通过在yocto层中复制/重命名automake_1.14.1.bb来创建虚拟配方zz:

../sources/meta-yocto/meta/recipes-devtools/zz
??? automake
?   ??? buildtest.patch
?   ??? py-compile-compile-only-optimized-byte-code.patch
?   ??? python-libdir.patch
??? automake.inc
??? zz_1.14.1.bb
Run Code Online (Sandbox Code Playgroud)

然后,bitbake发现它很好:

$ …
Run Code Online (Sandbox Code Playgroud)

openembedded bitbake yocto

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

使用 git rebase Interactive 来编排一系列 gitcherry-pick?

gitcherry-pick 允许简单地通过指示哪个合并父级应该用作基线来选择简单的合并。例如:

git cherry-pick -m 1 1234abcdef
Run Code Online (Sandbox Code Playgroud)

我有一堆提交想要挑选,其中一些可能是合并,而其他则不会。我希望能够使用 git rebase 来挑选所有这些提交,如下所示:

git rebase -i --onto myBranch myBranch 
Run Code Online (Sandbox Code Playgroud)

并将选择列表放入交互式文件中:

p 1234
p 3224
... a bunch more picks
p abcde
Run Code Online (Sandbox Code Playgroud)

而且,如果 git rebase 在这些提交中遇到合并,我想指定相当于cherry-pick 的-m 1选项,以指示应针对第一个父级选择更改。

我尝试了一些与合并相关的选项来变基,但最终总是收到错误:

commit 3c4ffe04532 is a merge but no -m option was given.
Run Code Online (Sandbox Code Playgroud)

(即使我指定 -m 来变基。)

我意识到我可以使用cherry-pick 编写一个脚本,但我喜欢现有的行为rebase -i(它运行在命令列表中,如果遇到无法处理的情况则暂停)。我非常想直接利用该逻辑,但我一直无法找到正确的方法来巧妙地使用 rebasepick命令来填补这一空白。

有没有办法让 rebase 采用cherry-pick 的-m #行为pick

为了以另一种方式陈述我的目标并帮助澄清问题 - 我想使用 git-rebase 的--i功能来协调一系列git cherry-picks,以便可以手动解决流程中的任何合并冲突,然后可以使用--continue …

git git-rebase git-cherry-pick

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

GDB是否有"逐步调用"指令?

WinDBG和相关的Windows内核调试器支持"pc"命令,该命令运行目标直到到达下一个调用语句(在汇编中).换句话说,它在创建新的堆栈帧之前就中断了,与"完成"相反.GDB中的"开始"运行直到主要开始,但实质上我想要"开始",但带有"任何下一帧"的通配符.

我试图在GDB中找到类似的功能,但还没有找到它.

这可能吗?

示例WinDBG doc:http://windbg.info/doc/1-common-cmds.html#4_expr_and_cmds

gdb

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

Azure Devops Pipeline 多个矩阵选项的叉积

Azure DevOps 管道文档提供了一个用于matrix构建两个不同操作系统和版本组合的示例:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

这里

问题:有没有办法获得多组矩阵选项的叉积。举例来说,假设我想要这个:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.11"
    jdk10_windows:
      imageName: "windows-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

除了复制并粘贴整个列表之外,是否有更干净/更简单的方法来执行此操作?

从逻辑上讲,我希望能够说更多类似的话:

imageList: ['windows-latest', 'ubuntu-latest']
jdkList: ['1.10', '1.11']
optionList: ['a','b','c']

strategy:
  matrix_combine_lists:
    imageName: imageList
    jdkVersion: jdkList
    someOption: optionList
Run Code Online (Sandbox Code Playgroud)

azure azure-devops azure-pipelines azure-pipelines-yaml

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