1. ホーム
  2. c++

[解決済み] クラステンプレートの使用にはテンプレート引数リストが必要

2022-03-03 18:52:20

質問

クラスからメソッドの実装を削除したところ、以下のエラーが発生しました。

use of class template requires template argument list

テンプレート・タイプを全く必要としないメソッドの場合... (他のメソッドについては、すべてOK)

クラス

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();
}

解決方法は?

そのはずです。

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

また、テンプレートクラスの実装とヘッダーを分離することはできないので、コードがそれほど短ければ、インライン化すればよいのです。