具有模板化参数的类函数部分专用化

class function partial specialization with templated argument

本文关键字:类函数部 专用 参数      更新时间:2023-10-16

我想要一个队列模板类,它可以通过模板参数指定内部容器结构并专门化 Top 函数(因为不同的容器使用不同的函数名称来访问前端项目),如以下代码:

template<class I, class C = std::queue<I>>
class Queue
{
    C items;
public:
    I* Top()
    {
        std::cout << "this is a queue" << std::endl;
        return &items.front();
    }
};
template<class I>
void I* Queue<I, std::priority_queue<I>>::Top()
{
    std::cout << "this is a priority_queue" << std::endl;
    return &items.top();
}

但是,这段代码会导致很多编译错误。有没有人可以给我一个提示,我是否在设计模板类时走错了方向?谢谢。

您正在尝试部分专用化(成员)函数模板。函数模板不能部分专用于C++。你必须部分地专注于整个班级,或者找到其他方法来做你想做的事情。例如,您可以在 Top() 中使用特征:

I* Top()
{
    return MyQueueTraits<I, C>::GetTop(items);
}
template <class I, class C>
struct MyQueueTraits
{
  static I* GetTop(C &c) { return &c.front(); }
};
template <class I>
struct MyQueueTraits<I, std::priority_queue<I>>
{
  static I* GetTop(std::pirority_queue<I> &c) { return &c.top(); }
};