虽然最好只抛出从std::exception类派生的类型的异常,但C++可以抛出任何东西.以下所有示例都是有效的C++:
throw "foo"; // throws an instance of const char*
throw 5; // throws an instance of int
struct {} anon;
throw anon; // throws an instance of not-named structure
throw []{}; // throws a lambda!
Run Code Online (Sandbox Code Playgroud)
最后一个例子很有趣,因为它可能允许传递一些代码在catch站点执行,而不必定义单独的类或函数.
但是有可能抓住一个lambda(或一个闭包)吗?catch ([]{} e)不起作用.
我正在为 git 编写一些工具(可以说它是另一个 GUI),并且我计划并行运行多个 git 命令(使用命令行客户端),因此多个进程可能随时访问存储库。
是git push与几个提交一个原子操作?
git push同一分支的其他操作git pull来自同一分支的操作对于情况 1. 它必须是。否则我的提交会干扰其他人的提交,可能会造成不一致或无效的状态。Git 通过强迫我首先集成其他人的更改(如果我输掉比赛)或强迫其他人集成我的更改(如果我赢得比赛)来防止这种情况。
但是 2. 呢?如果我的存储库如下所示:
C---D---E master
/
A---B origin/master
Run Code Online (Sandbox Code Playgroud)
有没有人git pull在我做的git push时候看到 A---B 或 A---B---C---D---E,或者他们也能得到介于两者之间的任何东西,例如 A--- B---C---D?
我似乎记得不向 C++11 添加信号量的基本原理是它们太容易被错误使用,程序员最好使用互斥锁和条件变量。
如果是这样,最终将信号量添加到 C++20 的理由是什么?
似乎将元组设置为metavar位置参数并请求帮助不起作用:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('size', type=int, nargs=2, help='size', metavar=('w', 'h'))
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)
当调用 as 时,这会产生错误prog.py --help。该错误在 Python3 版本之间有所不同(我尝试了 3.5、3.6、3.8)并且包含ValueError: too many values to unpack (expected 1)或TypeError: sequence item 0: expected str instance, tuple found。请参阅 Wandbox 上的实例。
对于可选参数,一切都很好:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--size', type=int, nargs=2, help='size', metavar=('w', 'h'))
args = parser.parse_args()
print(args)
Run Code Online (Sandbox Code Playgroud)
我的代码是否无效,或者我是否在 Python 实现中发现了错误?
请注意,简单地解析参数就可以按预期工作。
我想变基到一个特定的提交,该提交不是另一个分支的 HEAD,而是向后移动:
A --- B --- C master
\
\-- D --- E topic
Run Code Online (Sandbox Code Playgroud)
到
A --- B --- C master
\
\-- D --- E topic
Run Code Online (Sandbox Code Playgroud)
我如何以优雅且通用的方式实现这一目标?
一般来说,我的意思是目标提交(B)不一定是 HEAD 的直接祖先(我也可能变基到 A 或先前的提交),并且主题分支上可能不止两个提交。我可能还想从 B 变基到 A。
我有一个相对简单的Python代码:
import threading
class Foo():
def __init__(self):
self._thread = None
def start(self):
self._thread = threading.Thread(...)
def stop(self):
if self._thread:
...
Run Code Online (Sandbox Code Playgroud)
一位同事建议我应该None在stop函数中显式地进行比较:if self._thread is not None:
我不确定哪个版本更Pythonic:隐式检查还是显式检查?另外,如果我使用任何其他类型(除了集合之外,在布尔上下文测试中评估是否为空)我应该None显式比较吗?
我正在编写一个库,它对内置类型(int、float、double 等)和用户提供的类型执行一些操作。其中之一是由模板函数执行的:
namespace lib
{
template<typename T>
inline auto from_string(std::string const & s, T & t) -> bool
{
std::istringstream iss(s);
iss >> t;
return !iss.fail();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个定制点 - 用户可以根据自己的类型重载此函数:
namespace foo
{
class UserType
{
// (...)
};
}
namespace lib
{
inline auto from_string(std::string const & s, foo::UserType & ut) -> bool
{
// some implementation
}
}
Run Code Online (Sandbox Code Playgroud)
或者将from_string函数放在同一命名空间中并通过 ADL 访问:
namespace foo
{
inline auto from_string(std:string const & s, UserType & ut) -> bool …Run Code Online (Sandbox Code Playgroud) 我有一个包含几个子模块的 git 存储库(请参阅示例)。它的结构如下所示:
I--A--B <- main
\
C <- branch-c
Run Code Online (Sandbox Code Playgroud)
submodule-asubmodule-bsubmodule-con 分支branch-cgit clone --recurse-submodules <URL>当我仅使用submodule-a和子模块克隆上述存储库时,
子submodule-b模块将被初始化并克隆。
branch-c当我想使用来检查分支时git checkout branch-c,会创建 的目录submodule-c,但子模块本身并未初始化。命令输出中没有指示需要执行一些额外步骤。既不git status给出git diff任何提示。
相反,当我想branch-c使用它进行检查时git checkout --recurse-submodules branch-c,出现错误:
fatal: not a git repository: ../../.git/modules/subrepos/subrepo-c
fatal: could not reset submodule index
Run Code Online (Sandbox Code Playgroud)
如何branch-c在自动初始化所有子模块的同时签出(或切换到)分支?
git ×4
c++ ×3
python ×2
argparse ×1
c++11 ×1
c++17 ×1
c++20 ×1
concurrency ×1
exception ×1
git-checkout ×1
git-pull ×1
git-push ×1
git-rebase ×1
lambda ×1
nonetype ×1
python-3.x ×1
semaphore ×1