我想创建一个模板,该模板在另一个返回与成员函数相同类型的对象上调用成员函数.在成员函数上使用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
使用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中应该是微不足道的,所以也许我只是遗漏了一些明显的东西.
谢谢你的帮助!
我试图在现有的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) 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 …
WinDBG和相关的Windows内核调试器支持"pc"命令,该命令运行目标直到到达下一个调用语句(在汇编中).换句话说,它在创建新的堆栈帧之前就中断了,与"完成"相反.GDB中的"开始"运行直到主要开始,但实质上我想要"开始",但带有"任何下一帧"的通配符.
我试图在GDB中找到类似的功能,但还没有找到它.
这可能吗?
示例WinDBG doc:http://windbg.info/doc/1-common-cmds.html#4_expr_and_cmds
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 ×1
azure-devops ×1
bitbake ×1
c++ ×1
c++11 ×1
gdb ×1
git ×1
git-rebase ×1
openembedded ×1
python ×1
python-3.x ×1
string ×1
stringio ×1
templates ×1
yocto ×1