在C ++ 11中,你可以将ref'ed基类传递给线程的构造函数并获得多态行为吗?

时间:2012-03-29 08:19:16

标签: c++ multithreading c++11 ref

我观察到Visual Studio 11 Beta中的新库与使用thread()和ref()的Boost之间的行为存在差异。我想知道谁是对的。如果标准偏离Boost的原始实现,则可能是两者。 (但我不打算破译标准......)

我会尝试使用MinGW ... Alas,AFAIK,< thread>不适用于MinGW。

所以,第一个问题是,gcc和Clang是否表现出相同的编译失败?如果他们不这样做,我将提交一个针对VS的错误。第二个问题可能是,如果编译失败是正确的,那么我的工作方式是什么来获得Boost给我的东西(没有继续使用Boost)?

我想我确实有第三个问题......我开始做什么甚至犹豫不决?

class base
{
public:
    virtual void operator()() = 0;
};

class derived : public base
{
public:
    virtual void operator()()
    {
        cout << "derived" << endl;
    }
};

int main()
{
    base *b = new derived;

    std::thread t(std::ref(*b)); // Nasty compilation errors.

    boost::thread t(boost::ref(*b)); // Works fine.

    t.join();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

我提交了针对Visual Studio 11 Beta here的错误。还没有状态。当我得到它时,我会用状态编辑这篇文章。

编辑:已在VS 2015 RTM中修复,根据错误报告中的更新。