スイッチを暗黙的にしたい場合は、ポリモーフィズムを使用する必要があると思います(型が共通のインターフェースを共有している場合)。オーバーロードを使用する別の方法は、ペアの 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);
}