Let’s say I have an abstract base class Base with a virtual function doSomething()
There are two derived classes, one of which takes no parameters in doSomething() while the other takes a structure and an integer as a parameter.
A function in another class (SomeClass) calls doSomething() using a Base* variable.
It also needs to pass the parameters i mentioned for DerivedTwo.
How do i choose the prototype without using an if-else to check for the object’s class at run-time?
Thank you.
class Base {
public:
void virtual doSomething();
}
class DerivedOne : Base {
public:
void doSomething(int a,struct b);
}
class DerivedTwo : Base {
public:
void doSomething();
}
One way to do this would be:
You could then use
dynamic_castto determine the type at runtime since you seem to have a type-conditional expression someplace inSomeClass. The methods are not equal and fundamentally distinct. Also,DerivedOne::doSomethingwould hideBase::doSomething.Update
As the others had already stated, it’s often a bad smell if your program relies on type-conditional expressions. Since your example does not have enough context to offer appropriate solutions, it’s hard for us to help you in this regard. If you are interested in removing the type-conditional, one of many potential solutions to this problem would be:
then you could remove the type-conditional expression from your program. If you’d like help in this regard, feel free to ask here or open a new question if you feel it is more appropriate.