我对模板有一点问题。由于用代码更容易解释,这是我的问题。
我有一个接口类:
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);
};
它运行良好,但我有点失去了对我的结构类的兴趣。
那么,我做错了什么?有没有“正确”的方式来做我想做的事?
谢谢。