我有一个可以(有时必须)采用const类型的模板类,但是有一种方法可以返回具有相同类型的类的新实例,但应该明确为非常量。例如下面的代码编译失败
template<class T> class SomeClass {
public:
T val;
SomeClass(T val) : val(val) {}
SomeClass<T> other() {
return SomeClass<T>(val);
}
};
int main() {
SomeClass<const int> x(5);
SomeClass<int> y = x.other();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为即使在构造函数期间 val 上有一个副本,它也会复制到相同的类型 - const int。就像你可以在模板中区分T和一样const T,有没有办法区分T和“ nonconst T”?
我有几个工作函数,调用可能会发生错误的附件函数.如果附件功能确定发生了不好的事情,我希望能够停止工作功能,而无需在工作功能中进行多次标记检查.例如,
struct Worker {
bool badhappened = false;
Worker() {
std::thread([&]() {
while ( not badhappened );
// kill the work
}).detach();
}
int WorkComponent {
if ( badhappening() )
badhappened = true;
return someint;
}
void DoWork {
// WorkComponents called several times
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道该怎么称呼kill the work.DoWork在单独的线程中发生并不是问题,但pthread_kill在C++的线程中似乎没有相应的东西.有没有涉及多次if(badhappened) return;调用的解决方案DoWork?