Re: Accessing types in base class?
none wrote:
I have this base class:
template<typename J>
class Processor {
public:
const unsigned int Dimension = J::Dimension;
typedef typename J::ImageType ImageType;
Processor ();
virtual ~Processor ();
};
#endif
In a sub class I need to use the types from the base class:
template <typename J>
class SubProcessor : public Processor<J>{
public:
void test(ImageType image) {
// do stuff
}
};
But that is not possible! The base class type "ImageType" is not visible
in the sub class. In the sub class I could just do the same as in the
base class:
typedef typename J::ImageType ImageType;
but what is the point of using inheritance then?
The rules for deriving from template specializations are a bit more
complicated, because of the possibility of explicitly specializing a
template. There's no requirement, for example, that Processor<int> have
a member named ImageType, because it could be an explicit specialization:
template <> Processor<int> { /* empty definition */ };
So if you want to talk about a member of a base class that's a template
specialization you have to add qualifiers to the names the members that
you want, generally with this-> to talk about a member function or a
data member, or Processor<J>:: to talk about a type that's named in the
template. Once you've done that, trying to use an explicit
specialization that doesn't define the member results in an error.
template <typename J>
class SubProcessor : public Processor<J> {
public:
void test(Processor<J>::ImageType image) { } // OK
};
SubProcessor<double> spd; // OK
SubProcessor<int> ipd; // error: no ImageType in Processor<int>
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of
"The Standard C++ Library Extensions: a Tutorial and Reference"
(www.petebecker.com/tr1book)