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