необходимо создать unordered_map для integer и некоторого определенного класса - MyClass, где MyClass использует мьютекс для синхронизации доступа к данным, т. Е. Объект MyClass нельзя скопировать или перенести. Возможно ли создать такую карту? Как использовать emplace для создания объекта MyClass, чтобы избежать копирования/перемещения?unordered_map emplace - как создавать объекты на месте
template<typename T>
class MyClass {
public:
T pop() {
std::unique_lock<std::mutex> lock(m_mutex);
m_cv.wait(lock, [this]{return !m_queue.empty();});
return m_queue.pop();
}
void push(T const& x) {
{
std::unique_lock<std::mutex> lock(m_mutex);
m_queue.push(x) ;
}
m_cv.notify_one();
}
private:
std::queue<T> m_queue ;
std::mutex m_mutex ;
std::condition_variable m_cv;
};
int main(){
std::unordered_map<int, MyClass<float>> mmap;
mmap.emplace(1, MyClass<float>{});
}
в любом случае этот код не будет компилироваться, как 'станд :: очереди :: pop' возвращает void, а не 'T'. если 'T'' 'void', то' std :: queue 'является незаконным –