我想有一个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();
}
但是,这段代码会导致很多编译错误。有没有人能给我一个提示,我是否会进入设计模板类的错误方向?感谢。
答案 0 :(得分:1)
您尝试部分专门化(成员)功能模板。函数模板不能部分专门用于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(); }
};