Будучи глубоко подозрительным к любому коду, использующему голые new
или delete
вызовы (кстати, хорошее отношение к разработке), я переписал его для использования более "современных" идиом C ++.
Я не был полностью уверен, почему вы думали, что вам нужно хранить указатели для фьючерсов, которые, казалось, усложняют ситуацию.В любом случае, фрагмент new std::async()
вызвал проблемы для g++
, и я считаю, что это является причиной вашей ошибки no type named 'async' in namespace 'std'
.
Технически, это правильно, нет типа async
в std
, поскольку async
является функцией , а не типом.
Измененный код выглядит следующим образом:
#include <iostream>
#include <future>
#include <vector>
class Calculator {
public:
static int add(int a, int b) { return a + b; }
};
int main() {
std::vector<std::future<int>> futures;
for(auto i = 0; i < 4; i++)
futures.push_back(std::async(&Calculator::add, i, 3));
for(auto i = 0; i < 4; i++)
std::cout << futures[i].get() << std::endl;
return 0;
}
Это компилирует иработает очень хорошо, давая результаты, которые я ожидаю увидеть:
pax> g++ -Wall -Wextra -pthread -std=c++11 -o testprog testprog.cpp
pax> ./testprog
3
4
5
6