具有模板化参数的类函数部分专用化
class function partial specialization with templated argument
我想要一个队列模板类,它可以通过模板参数指定内部容器结构并专门化 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(); }
};
相关文章:
- 如何通过派生类函数更改基类中的向量
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- GCC 7 中模板类的模板成员函数的专用化
- C++ 类模板部分专用化,而不专用化所有成员函数
- 类模板成员函数的专用化
- 类成员函数的函数模板专用化
- 使用类指针重载C++命名空间函数模板专用化替代方法?
- 类和成员函数模板专用化出错
- C++ 模板化基类的函数模板专用化
- 模板类的成员函数的专用化 - 在 Linux 上使用 g++-4.7
- 在类体外部定义的成员函数上的 sfinae
- 将派生类传递给专用于基类的模板函数
- 具有模板化参数的类函数部分专用化
- 如何专用化基于类型依赖类型的C++模板化类函数
- 模板专用化类函数
- 从类外部访问专用虚拟函数
- 在派生类模板中专用基类的成员函数
- 模板中的模板.在模板函数中专用化模板类
- 模板类成员函数仅专用化
- 带有函数指针的模板类不接受专用化