pure virtual and template
This is a multi-part message in MIME format.
----------------1666025366511793979
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Hello,
I try to use abstract classes (only pure virtual function) with
templates for creating my my class structures, but it doesn't work:
my base class:
template<typename T> class distance {
enum matrixRowType { row = 0, column = 1 };
public :
virtual blas::vector<T> calculate( const blas::matrix<T>&, const
blas::matrix<T>&, const matrixRowType& ) const = 0;
virtual blas::vector<T> calculate( const blas::matrix<T>&, const
blas::matrix<T>&, const blas::matrix<T>&, const matrixRowType& ) const
= 0;
virtual blas::vector<T> abs( const blas::vector<T>& ) const = 0;
virtual T calculate( const blas::vector<T>&, const
blas::vector<T>& ) const = 0;
virtual T calculate( const blas::vector<T>&, const
blas::vector<T>&, const blas::vector<T>& ) const = 0;
virtual ~distance() = 0;
};
Now I try to implement these method in my real class with:
template<typename T> class euclid : public distance<T> {}
The compiler shows messages and errors. The blas namespace is used for
boost ublas structurs and I get errors from there like:
error: no type named 'property_map' in .....
If I remove the "public distance<T>" from my euclid class everything
works find. In my opinion I have created a pure virtual class for using
them as a master class. In my subclasses are guaranteed that the
methods all implementated. I need the templates because the types of my
classes are float, double or long double, so I don't want to implement
more classes.
What is my mistake in my design and how I can solve the problems?
Thanks
Phil
----------------1666025366511793979
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="949.54">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Helvetica}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #aa0d91}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #26474b}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; min-height: 16.0px}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Times}
p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Times; background-color: #ffffff; min-height: 14.0px}
p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; background-color: #ffffff}
p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; background-color: #ffffff; min-height: 14.0px}
span.s1 {color: #000000}
span.s2 {color: #3f6e74}
span.s3 {color: #aa0d91}
span.s4 {color: #1c00cf}
span.s5 {color: #26474b}
span.s6 {font: 12.0px Helvetica}
span.s7 {font: 12.0px Monaco; color: #aa0d91}
span.s8 {font: 12.0px Monaco}
span.s9 {font: 12.0px Monaco; color: #3f6e74}
span.s10 {background-color: #ffffff}
</style>
</head>
<body>
<p class="p1">Hello,</p>
<p class="p2"><br></p>
<p class="p3">I try to use abstract classes (only pure virtual function) with templates for creating my my class structures, but it doesn't work:</p>
<p class="p2"><br></p>
<p class="p3">my base class:</p>
<p class="p2"><br></p>
<p class="p4">template<span class="s1"><</span>typename<span class="s1"> </span><span class="s2">T</span><span class="s1">> </span>class<span class="s1"> distance {</span></p>
<p class="p5"><span class="s1"><span class="Apple-converted-space">?? </span></span><span class="s3">enum</span><span class="s1"> </span>matrixRowType <span class="s1">{ </span>row<span class="s1"> = </span><span class="s4">0</span><span class="s1">, </span>column<span class="s1"> = </span><span class="s4">1 </span><span class="s1">};</span></p>
<p class="p6"><span class="Apple-converted-space">?? ? ? ?</span></p>
<p class="p4"><span class="s1"><span class="Apple-converted-space">?? </span></span>public<span class="s1"> :</span></p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>> calculate( <span class="s3">const</span> <span class="s2">blas</span>::matrix<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::matrix<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s5">matrixRowType</span>& ) <span class="s3">const</span> = <span class="s4">0</span>;</p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>> calculate( <span class="s3">const</span> <span class="s2">blas</span>::matrix<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::matrix<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::matrix<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s5">matrixRowType</span>& ) <span class="s3">const</span> = <span class="s4">0</span>;</p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>> abs( <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>& ) <span class="s3">const</span> = <span class="s4">0</span>;</p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> <span class="s2">T</span> calculate( <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>& ) <span class="s3">const</span> = <span class="s4">0</span>;</p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> <span class="s2">T</span> calculate( <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>&, <span class="s3">const</span> <span class="s2">blas</span>::vector<<span class="s2">T</span>>& ) <span class="s3">const</span> = <span class="s4">0</span>;</p>
<p class="p7"><span class="Apple-converted-space">?? ? ? </span><span class="s3">virtual</span> ~distance() = 0;</p>
<p class="p7"><span class="Apple-converted-space">? ? </span>};</p>
<p class="p2"><br></p>
<p class="p3">Now I try to implement these method in my real class with:</p>
<p class="p2"><br></p>
<p class="p4">template<span class="s1"><</span>typename<span class="s1"> </span><span class="s2">T</span><span class="s1">> </span>class<span class="s1"> euclid : </span>public<span class="s1"> </span><span class="s2">distance</span><span class="s1"><</span><span class="s2">T</span><span class="s1">> {}</span></p>
<p class="p2"><br></p>
<p class="p3">The compiler shows messages and errors. The blas namespace is used for boost ublas structurs and I get errors from there like:</p>
<p class="p3">error: no type named 'property_map' in .....</p>
<p class="p2"><br></p>
<p class="p8"><span class="s6">If I remove the "</span><span class="s7">public</span><span class="s8"> </span><span class="s9">distance</span><span class="s8"><</span><span class="s9">T</span><span class="s8">>" from my euclid class everything works find. In my opinion I have created a pure virtual class for using them as a master class. In my subclasses are </span><span class="s10">guaranteed that the methods all implementated. I need the templates because the types of my classes are float, double or long double, so I don't want to implement more classes.</span></p>
<p class="p9"><br></p>
<p class="p10">What is my mistake in my design and how I can solve the problems?</p>
<p class="p11"><br></p>
<p class="p10">Thanks</p>
<p class="p11"><br></p>
<p class="p10">Phil</p>
</body>
</html>
----------------1666025366511793979--