使用类模板需要模板参数列表。

28
我将方法的实现从我的类中移出,并遇到了以下错误:
use of class template requires template argument list

对于完全不需要模板类型的方法...(其他方法都可以)

template<class T>
class MutableQueue
{
public:
    bool empty() const;
    const T& front() const;
    void push(const T& element);
    T pop();

private:
    queue<T> queue;
    mutable boost::mutex mutex;
    boost::condition condition;
};

错误的实现

template<>   //template<class T> also incorrect
bool MutableQueue::empty() const
{
    scoped_lock lock(mutex);
    return queue.empty();
}

11
不相关,但是“queue<T> queue”是非常奇怪的命名约定...类型名称应该很容易与实例名称区分开来。 这句话的意思是,将模板类 queue 的实例命名为 queue 是不规范的,因为它让类型名称和实例名称很难区分开来。需要更好的命名约定以提高代码可读性。 - relaxxx
我会听从您的建议,但这不是根本原因。 - Torrius
2个回答

48

应该是:

template<class T>
bool MutableQueue<T>::empty() const
{
    scoped_lock lock(mutex);
    return queue.empty();
}

如果您的代码非常短,只需将其内联,因为您无法分离模板类的实现和头文件。


1
无论如何,您都无法分离模板类的实现和头文件。 - Dynite
1
除非您在头文件末尾使用预处理器指令(#include MutableQueue.tpp),否则您无法将模板类的实现和头文件分开。 - chb
1
除非您明确实例化它,否则无法分离模板类的实现和头文件。 - bialpio

6

使用:

template<class T>
bool MutableQueue<T>::empty() const
{
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接