乍一看,一切似乎都是正确的,但这段代码不会编译。但是,如果我将基类的返回类型更改为,double *
那么它将编译。有人可以解释编译器如何/为什么不将模板类型“T”视为有效的返回类型。
基类:
01 template <typename T>
02 class DefaultValueFunctorBase {
03 public:
04 virtual const T operator() (void) const = 0;
05 };
子类:
01 class DblPtrDft : public DefaultValueFunctorBase<double *> {
02 public:
03 DblPtrDft (double default_value_)
04 : DefaultValueFunctorBase<double *>(),
05 _default_value(default_value_),
06 _default_value_ptr(&_default_value)
07 {}
08
09 const double * operator() (void) const { return _default_value_ptr; }
10
11 private:
12 const double *_default_value_ptr;
13 const double _default_value;
14 };
错误:
DblPtrDft.h:09:错误:为 'virtual const double* DblPtrDft::operator()() const' DefaultValueFunctorBase.h:04 指定的返回类型冲突:错误:覆盖 'const T DefaultValueFunctorBase::operator()() const [与 T = 双*]'</p>