我无法理解这里介绍的第二种情况.它说:
•场景2:添加具有默认参数的函数参数:
template <your_stuff> your_return_type_if_present
yourfunction(args, enable_if_t<your condition, FOO> = BAR) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
方案2使参数未命名.你可以说
::type Dummy = BAR,但名字Dummy是无关紧要的,并给它一个名字可能会触发一个未引用的参数警告.您必须选择FOO函数参数类型和BAR默认参数.你可以说int和0,但你的代码的用户可能会意外地传递给函数的一个额外的整数,将被忽略.相反,我们建议您使用void **,要么0或nullptr因为几乎没有什么可转换为void **:
template <your_stuff> your_return_type_if_present
yourfunction(args, typename enable_if<your_condition, void **>::type=nullptr) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果方案2使参数未命名,那么它可以使用什么?有没有办法让像这样的代码工作enable_if?
enum otype {oadd,omull};
template<otype o>
int add(int num1, std::enable_if<o == oadd, int>::type int= num2)
{
if (o == omull) return …Run Code Online (Sandbox Code Playgroud) 方案如下:线程A继续执行,直到它从线程B收到一个停止从控制台读取输入的停止信号.
实现这个的最佳方法是什么?例如,我想我可以将它实现为一个全局变量,线程A每隔一段时间就会检查一次,而线程B可以改为发出"停止"信号,
但我不知道这是不是正确的方法.
即使它是正确的,我应该使用"Volatile"还是"Atomic <>"?特别是线程A只读取变量的值,而线程B只写入变量.
如果在线程A读取它之后立即从线程B修改变量并不重要(不会引起问题"线程A退出时间有些放松(在信号之后容忍)")?
是否还有另一种方法让线程B启动线程A并在需要时停止它?