テンプレート化されたクラスMyQueueを実装しようとしています(論理構造はリングバッファです):
// MyQueue.h
#pragma once
template<typename T>
class MyQueue
{
public:
/* interface */
MyQueue(int sizeOfBuffer);
void push(const T& elem);
T pop(void);
private:
T* m_array;
};
template<typename T>
MyQueue<T>::MyQueue(int sizeOfBuffer)
{
m_array = new T[sizeOfBuffer];
}
通常、テンプレートクラスでコンストラクターの実装に直面するときは、宣言で実装します。
#pragma once
template<typename T>
class MyQueue
{
public:
/* interface */
MyQueue(int sizeOfBuffer){// do some actions with argument sizeOfBuffer};
void push(const T& elem);
T pop(void);
private:
T* m_array;
};
コンストラクターの本体は多くのスペースを占める可能性があるため、コードを読みやすくするために、宣言とは別に(ただし同じヘッダーに)実装することにしました。
質問:私が間違っていることと、私の問題を解決する方法は?