Ich bin neu in der C++ Sprache und brauche Hilfe mit dem Problem unten. Momentan versuche ich, "Vorlagen" und "Funktionszeiger" zu verstehen. Die folgende Template-Klasse, Queue, kompiliert, wenn sie in eine einzige CPP-Datei geschrieben:Vorlagen und Funktionspointer: Wie definiere ich einen Funktionszeiger, der in einer Template-Klasse deklariert wurde?
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;
};
Allerdings, wenn ich diesen Code in die .h und CPP-Dateien trennen (wie unten), erhalte ich Fehler, wo ich bin Definieren des Funktionszeigers in der CPP-Datei; in der Nähe der Linie:
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];
}
Ich hoffe, dass einer von euch C++ Experten könnte mir helfen, zu verstehen, wie das definieren, Funktionszeiger < T * deque()> Vielen Dank im Voraus für Ihre Hilfe.
Sie sollten auf "* C++ Zeiger *" achten, und wie sie funktionieren. Weil Ihr Code potenziell unsicher ist! –
@Biagio, danke für die Warnung. – Otelagh