如何设计一个满足std::queue或std::p riority_queue的模板?

How to design a template to satisfy either std::queue or std::priority_queue?

提问人:f1msch 提问时间:11/15/2023 更新时间:11/15/2023 访问量:32

问:

我想设计一个像这样的模板

template<typename T, typename QueueType = std::queue<std::shared_ptr<T>>>
class ThreadSafeQueue {};
template<typename T>
auto cmp = [](const T& d1, const T& d2) { return d1 > d2; };
template<typename T>
using ThreadSafePriorityQueue = ThreadSafeQueue<T,
    std::priority_queue<std::shared_ptr<T>,
    std::vector<std::shared_ptr<T>>,
    decltype(cmp<std::shared_ptr<T>>)>>;

并简单地称它为

struct S {
    bool operator>(const S& other) const {
        return false;
    }
};

ThreadSafeQueue<S> q;
ThreadSafePriorityQueue<S> q1;

但是它无法在返回的 c++17 下编译,但在 c++20 下似乎很好。 为什么? 如果我坚持使用 c++17,如何修改它?error C2280

模板 C++17

评论


答: 暂无答案