【问题标题】:Polymorphism with C++11 futures具有 C++11 期货的多态性
【发布时间】:2014-12-03 06:30:44
【问题描述】:

假设我有两个未来,future<int> afuture<char> b。有没有办法将这两个(或指向它们的指针)放入任何标准容器(std::{list,vector,...}

我打算用这个解决的问题:

设置:我有一个线程池库,它允许用户以带有参数的任意函数的形式提交任务作为任务。池在工作线程中执行带参数的函数,结果通过future<func::result_type> 传达给用户,其中funcstd::function<?>。 (?作为通配符,b/c it 具有任何功能。)这些期货也是等待任务完成的唯一外部方式。如果只想等到它们执行,则必须调用future::get() 并忽略结果。

问题:我想提供一种方法来等待当前队列中的所有任务。为此,我需要保留一份所有期货的清单,以便我可以对它们致电 get

我说的库,如果你真的需要上下文(280 loc):https://github.com/Tyler-Hardin/thread_pool

【问题讨论】:

  • 你能举一个你将用这个解决的问题的例子吗?如果你有,你会怎么用?
  • 这个问题真的是两个不同的问题。
  • @Johan,这是一个有点深的问题,但我可以发布它。
  • 我已经准备好答案,但我正在工作,想在午餐时间好好检查一下,然后再发帖。
  • 主要是因为 C++ 真的不应该像 Java 那样被使用。

标签: c++ c++11 polymorphism c++-standard-library


【解决方案1】:

我不太明白你为什么需要这个,但你可以使用标准技术 - 具有公共基类的模板包装器:

class FutureHolderBase {
public:
    virtual ~FutureHolderBase() = default;
};

template<typename T>
class FutureHolder : public FutureHolderBase {
private:
    std::future<T> m_future;
};

int main() {
    // unfortunately can't use list-initialization here because it supports only copyable types
    std::vector<std::unique_ptr<FutureHolderBase>> v;
    v.push_back(std::make_unique<FutureHolder<int>>());
    v.push_back(std::make_unique<FutureHolder<float>>());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-18
    • 2021-06-21
    • 2017-03-28
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多