Я наблюдал разницу в поведении новой библиотеки в Visual Studio 11 Beta и Boost с помощью thread() и ref(). Мне интересно, кто прав. Это может быть и то, и другое, если стандарт отклонился от первоначальной реализации Boost. (Но я не собираюсь пытаться расшифровывать стандартные ...)В C++ 11 вы можете передать базовый класс ref's в конструктор потока и получить полиморфное поведение?
Я бы попробовал это с MinGW ... Увы, AFAIK, < нить > не работает для 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;
}
clang -stdlib = libC++ -std = C++ 11 компилирует и выводит «производные». Какую ошибку вы видите? –
g ++ -std = C++ 0x -lpthread также компилируется и, хотя я не вижу прямого использования для полиморфных потоков, в этом нет ничего злого. – stefaanv
Спасибо за помощь, ребята. Я напишу ошибку на VS и, надеюсь, подтвердят. – screwnut