Re: Can we use abstract class templating classes?
On Mar 16, 4:37 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
"newbie" <mitbb...@yahoo.com> wrote in message
news:1174087889.837628.126750@n59g2000hsh.googlegroups.com...
Say I have the following class:
class MyAbs {
virtual ~MyAbs() {}
virtual void foo() = 0;
virtual void bar() {cout << "abs::bar"; }
}
class MyDer1: public MyAbs {
MyDer1() {counter = 0; }
foo() { cout << "der1::foo--" << counter++; }
int counter;
}
class MyDer2: public MyAbs {
MyDer1() {counter = 100; }
foo() { cout << "der1::foo--" << counter--; }
int counter;
}
-----------------------------------------
Can I do something like this? Thanks
template <class Toy>
class MyTemplateClass{
Toy toy_;
Play() { toy_.foo(); }
}
Your code shows classes MyAbs, MyDer1 and MyDer2, yet your template shows
Toy. I'm presuming in my response that by
Toy toy_;
Play() ( toy_.foo(); )
you actually meant
MyAbs toy_;
Play() { toy_.foo(); }
No. Your template is attempting to instantize a class MyAbs which is a
virtual class. You couldn't do it in main so you couldn't do it in a
template. However, I believe you could do:
MyAbs* toy_ = new MyDer1;
Play() { toy_->foo(); }
Thanks. I am not sure
What I really want is to ask class MyTemplateClass behave clever
enough to
understand things like
///////////////////////////////////
class MyAbs {
virtual ~MyAbs() {}
virtual void foo() = 0;
virtual void bar() {cout << "abs::bar"; }
}
class MyDer1: public MyAbs {
MyDer1() {counter = 0; }
foo() { cout << "der1::foo--" << counter++; }
int counter;
}
class MyDer2: public MyAbs {
MyDer1() {counter = 100; }
foo() { cout << "der1::foo--" << counter--; }
int counter;
}
///////////////////////////////////////
template <class Toy>
class MyTemplateClass{
Toy toy_;
Play() { toy_.foo();
}
typedef MyTemplateClass<MyDer1> MyClass1;
typedef MyTemplateClass<MyDer2> MyClass2;
////////////////////////////////////////
int main() {
MyClass1 m1;
MyClass2 m2;
m1.Play();
m2.Play();
return 0;
}