スイッチを暗黙的にしたい場合は、ポリモーフィズムを使用する必要があると思います(型が共通のインターフェースを共有している場合)。オーバーロードを使用する別の方法は、ペアの 2 番目の要素を、型タグではなく、その特定の型を処理する関数へのポインターにすることです。C++11 を使用している場合は、ラムダ式を使用することもできます。
最初のオプションでは、次のような結果が得られます。
class IMyInterface
{
public:
virtual void handle() = 0;
};
class AClass : public IMyInterface
{
public:
virtual void handle()
{ /*handles (*this) object*/ }
};
class BClass : public IMyInterface
{
public:
virtual void handle()
{ /*handles (*this) object*/ }
};
void handle_elements(std::vector<IMyInterface*>& v)
{
while (!v.empty)
{
IMyInterface* obj = v.back();
v.pop_back();
obj->handle();
}
}
2番目のオプションは次のようになります。
typedef void (*handler)(void*);
static void handle_int(void* intptr)
{
int* iValue = (int*)intptr;
//Handles iValue
}
static void handle_complex_object(void* ccptr)
{
ComplexClass* ccValue = (ComplexClass*)ccptr;
//Handles ccValue
}
void handle_elements(vector<pair<void*, handler>>& v)
{
while (!v.empty)
{
pair p = v.back();
v.pop_back();
p.second(p.first);
}
}
void fill_queue(vector<pair<void*, handler>>& v)
{
v.push_back(pair<void*, handler>(new int(10), handle_int);
v.push_back(pair<void*, handler>(new ComplexClass(), handle_complex_object);
}