テンプレートの仕組みを理解しようとしています。私はこの問題を思いつきました。今、私は多型を使って解決できることを完全に認識していますが、テンプレートを使用するだけで解決できるかどうか不思議です。次のような状況は次のとおりです。バリデーションテンプレートを使用するメンバを持つクラス
#include <queue>
template <typename GenType, typename Comparator>
class Priority
{
public:
Priority()
{ }
~Priority()
{ }
void insert(GenType const& t)
{ mQueue.push(t); }
private:
std::priority_queue<GenType, std::vector<GenType>, Comparator> mQueue;
};
template<typename GenType>
class FIFO
{
public:
FIFO()
{ }
~FIFO()
{ }
void insert(GenType const& t)
{ mList.push_front(t); }
private:
std::deque<GenType> mList;
};
そして今、私はQueue
またはFIFO
(または他のタイプのいずれかを使用することができますクラスを持っている:
は、私は次のように定義されているキューの2種類を、持っていると仮定しますそれは立っ
// I'm not sure that this is how it should be declared...
template <typename GenType,
template<typename, typename...> class List>
class User
{
public:
User()
{ }
~User()
{ }
void add(GenType const& t)
{ mList.insert(t); }
private:
// This line gives an error.
List mList;
};
として、マークされた行は、私が実際にList
に任意のテンプレートパラメータを渡されていないので、私は理解している、エラーを与える:。ここに示したように)キューの問題は、このエラーを解決する方法がわからないことです。
User
クラスは、キューの任意の型を取ると、次のように使用することができ持つことができるようにしました。
User<int, FIFO> u1;
// Not sure if it is this way:
User<int, Priority, std::less<int>> u2;
// Or this way:
User<int, Priority, std::less> u2;
これを解決する方法上の任意の提案を問題?
@ Rakete1111なぜそうです、はいです。今すぐ修正します。感謝! – Mauricio