我有一个简单的事件类,一切正常。
我试图添加一个模板类,我可以传递参数,然后在等待完成时读取它。
目前我只使用struct,因为我需要将arg设置为0,如果我不使用它。
有没有更好/更简单的方法来做到这一点,所以我可以传递任何类型的参数?
class Event
{
public:
Event() : _signalled(false) {}
virtual void notify()
{
std::unique_lock<std::mutex> lock(_mutex);
_signalled = true;
_condvar.notify_one();
}
virtual void wait()
{
std::unique_lock<std::mutex> lock(_mutex);
_condvar.wait(lock, [&] { return _signalled; });
_signalled = false;
}
void stop()
{
std::unique_lock<std::mutex> lock(_mutex);
_signalled = false;
}
private:
std::mutex _mutex;
std::condition_variable _condvar;
bool _signalled;
};
template <class T>
class ArgEvent : public Event
{
public:
void notify()
{
Event::notify();
this->arg = { 0 };
}
void notify(T arg)
{
Event::notify();
this->arg = arg;
}
T getArg()
{
return this->arg;
}
void wait()
{
Event::wait();
}
void wait(T& arg)
{
Event::wait();
arg = this->arg;
}
private:
T arg;
};
答案 0 :(得分:0)
Boost.Optional允许实现在没有c ++ 17的情况下工作。 https://www.boost.org/doc/libs/1_67_0/libs/optional/doc/html/index.html