模板和函数指针:如何定义在模板 class 中声明的函数指针?

Templates and Function-Pointers: How do I define a function-pointer that was declared in a template class?

我是 c++ 语言的新手,需要帮助解决以下问题。目前,我正在努力了解 "templates" 和 "function pointers"。以下模板 class、Queue 在写入单个 .cpp 文件时编译:

template <typename T> class Queue
{
  public:
    Queue()
    {
        m_add = m_remove = 0;
    }
    void enque(T *c)
    {
        m_array[m_add] = c;
        m_add = (m_add + 1) % SIZE;
    }
    T *deque()
    {
        int temp = m_remove;
        m_remove = (m_remove + 1) % SIZE;
        return m_array[temp];
    }
  private:
    enum
    {
        SIZE = 8
    };
    T *m_array[SIZE];
    int m_add, m_remove;
};

但是,当我将这段代码分成 .h 和 .cpp 文件时(如下所示),我在 .cpp 文件中定义函数指针时遇到错误;近线:

template<typename T>
T (Queue<T>::*deque)() {

Queue.h:

#ifndef QUEUE_H_
#define QUEUE_H_

template<typename T>
class Queue {
    enum {
        SIZE = 8
    };
    T *m_array[SIZE];
    int m_add, m_remove;
public:
    Queue();
    virtual ~Queue();
    void enque(T *c);
    T *deque();
};

#endif /* QUEUE_H_ */

Queue.cpp:

#include "Queue.h"

template<typename T>
Queue<T>::Queue() {
    m_add = m_remove = 0;
}

template<typename T>
Queue<T>::~Queue() {
}

template<typename T>
void Queue<T>::enque(T *c) {
    m_array[m_add] = c;
    m_add = (m_add + 1) % SIZE;
}

template<typename T>
T (Queue<T>::*deque)() {
    int temp = m_remove;
    m_remove = (m_remove + 1) % SIZE;
    return m_array[temp];
}

我希望你们中的一位 C++ 专家能帮助我理解如何定义函数指针 < T *deque() > 在此先感谢您的帮助。

您的实施与您的声明不符(很明显)。您的函数声明为:

template<class T>
class Queue
{
    //... other members

    T* deque();
};

在 class body 之外,变成:

template<class T>
T* Queue<T>::deque()

也就是说,您需要阅读以下内容:"Why can templates only be implemented in the header file"。它将解释为什么将模板实现从它所属的位置移动到 cpp 文件很可能是一个错误:header.