私がやろうとしていることは、次のようなものです。
void SomeFunction(Base *){//do something}
void SomeFunction(Derived *){//do something else}
これは C++ で可能ですか? これまでの私の試みは、関数の基本バージョンを呼び出すだけです。わかりやすくするための例を次に示します。
例:
#include <iostream>
#include <vector>
class Base
{
public:
Base () {std::cout << "Base Constructor for " << this << std::endl;}
void virtual PrintSomething ()
{
std::cout << "I am Base!" << std::endl;
};
};
class Derived : public Base
{
public:
Derived () : Base () {std::cout << "Derived Construtor for " << this << std::endl;}
void virtual PrintSomething ()
{
std::cout << "I am Derived!" << std::endl;
};
};
void DoAmazingStuff ( Base * ) {std::cout << "Amazing!" << std::endl;}
void DoAmazingStuff ( Derived * ) {std::cout << "DERP!" << std::endl;}
int main ()
{
std::vector<Base *> some_vector;
Base *x = new Base ();
Derived *y = new Derived ();
some_vector.push_back ( x );
some_vector.push_back ( y );
// This is the part that isn't functioning as expected.
/******************************************/
DoAmazingStuff ( some_vector[0] );
DoAmazingStuff ( some_vector[1] );
/******************************************/
std::cin.get ();
std::cin.get ();
delete some_vector[0];
delete some_vector[1];
}
次の行は呼び出されません。
void DoAmazingStuff ( Derived * ) {std::cout << "DERP!" << std::endl;}