繁体   English   中英

具有模板化参数的类函数局部特化

[英]class function partial specialization with templated argument

我想拥有一个Queue模板类,该模板类可以通过template参数指定内部容器的结构并专门化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(); }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM