私はC++言語に新しく、以下の問題の助けが必要です。現在、私は "テンプレート"と "関数ポインタ"の周りに頭を抱えようとしています。次のテンプレートクラス、キュー、単一.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];
}
私はあなたの1は、専門家は、私が定義する方法を理解するのに役立つ可能性があり、C++ことを期待しています関数ポインタ< T * deque()>ご協力いただきありがとうございます。
"* C++ポインタ*"に注意してください。あなたのコードは潜在的に危険です! –
@Biagio、警告ありがとう。 – Otelagh