Типы не виртуальные; вы не можете "переопределить" их в производном классе.
Из моего немного ограниченного понимания того, что вы пытаетесь сделать, я думаю, вы должны сделать Callback
шаблоном. Примерно так:
template<typename ArgType>
class Callback
{
typedef function<void(ArgType)> Function;
typedef vector< pair<string, vector<Function>> > CallbackContainer;
public:
void callback(string); // both types are used
Конечно, это работает только для функций, которые принимают ровно один аргумент. Сделать его более общим в современном C ++ далеко не тривиально; в C ++ 0x с переменными шаблонами становится немного легче.
Может быть, вы могли бы взглянуть на Boost, хотя. Есть большая вероятность, что вы можете использовать что-то, что уже есть, вместо того, чтобы свернуть свое собственное.