テンプレートに少し問題があります。コードで説明する方が簡単なので、ここに私の問題があります。
私はインターフェースクラスを持っています:
template <typename T>
class IElemValidator
{
public:
virtual bool validate(T val) const = 0 ;
virtual ~IElemValidator(){};
};
およびtypedef構造体:
template <typename T>
struct vecValidators
{
typedef boost::ptr_vector<IElemValidator<T>> Type;
};
次のような別のテンプレートクラスのパラメータを除いて、どこでもtypedef構造体を使用できます。
template <typename T>
class CTestMaybe
{
public:
CTestMaybe(vecValidators<T>::Type* a_Validators);
};
コンパイルしようとすると、次のエラーが発生します。
Error 2 error C2061: syntax error : identifier 'Type'
もちろん、私はこれを行うことができます:
template <typename T>
class CTestMaybe
{
private:
typedef boost::ptr_vector<IElemValidator<T>> vecValidator;
public:
CTestMaybe(vecValidator* a_Validators);
};
うまく機能していますが、構造体クラスの興味を失っています。
だから、私が間違っているのは何ですか?私がやりたいことをするための「正しい」方法はありますか?
ありがとう。