首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量参数列表转发到mock std::thread

将变量参数列表转发到mock std::thread
EN

Stack Overflow用户
提问于 2020-06-24 19:59:58
回答 2查看 50关注 0票数 2

我想模拟我的线程,并为此编写了一个Adapter,它只是将我需要的一切转发到std::thread。对于构造函数,我没有做到这一点。我尝试了以下几点:

代码语言:javascript
复制
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_;
};

不幸的是,这不能编译。我在构造函数中转发参数的想法似乎是无效的,编译器似乎不喜欢变量参数列表。有人知道我该怎么解决这个问题吗?

最好的

萨沙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-24 20:28:05

正如Daniel所说,您需要转发参数并扩展参数包,如下所示:

代码语言:javascript
复制
template< class Function, class... Args >
explicit ThreadAdapter(Function&& f, Args&&... args) :
    thread_(std::forward <Function> (f),
    std::forward <Args...> (args...)) {
}

然后是it works

票数 2
EN

Stack Overflow用户

发布于 2020-06-25 15:15:51

谢谢丹尼尔和保罗,这对我很有效。

只是为了完成我的mcok,我通过一个工厂扩展了它,在那里我也有一个创建方法。在此方法中,我还转发了参数:

代码语言:javascript
复制
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...));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62554557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档