我想模拟我的线程,并为此编写了一个Adapter,它只是将我需要的一切转发到std::thread。对于构造函数,我没有做到这一点。我尝试了以下几点:
class ThreadAdapter {
public:
template< class Function, class... Args >
explicit ThreadAdapter(Function&& f, Args&&... args) : thread_(f, args) {
}
virtual ~ThreadAdapter() = default;
virtual bool joinable() {
return thread_.joinable();
}
virtual void join() {
thread_.join();
}
private:
std::thread thread_;
};不幸的是,这不能编译。我在构造函数中转发参数的想法似乎是无效的,编译器似乎不喜欢变量参数列表。有人知道我该怎么解决这个问题吗?
最好的
萨沙
发布于 2020-06-24 20:28:05
正如Daniel所说,您需要转发参数并扩展参数包,如下所示:
template< class Function, class... Args >
explicit ThreadAdapter(Function&& f, Args&&... args) :
thread_(std::forward <Function> (f),
std::forward <Args...> (args...)) {
}然后是it works。
发布于 2020-06-25 15:15:51
谢谢丹尼尔和保罗,这对我很有效。
只是为了完成我的mcok,我通过一个工厂扩展了它,在那里我也有一个创建方法。在此方法中,我还转发了参数:
template< class Function, class... Args >
std::shared_ptr<ThreadAdapter> createThread(Function&& f, Args&&... args) {
return std::make_shared<ThreadAdapter>(std::forward<Function>(f), std::forward<Args...>(args...));
}https://stackoverflow.com/questions/62554557
复制相似问题