Я знаю, что есть принятый ответ, но есть один (безобразный) способ добиться того, чего вы хотите, хотя я бы не рекомендовал это:
template <typename T>
class Variable
{
public:
Variable (T v) : m_value (v) {}
virtual void Callback (const char *values, ...) = 0;
private:
T m_value;
};
class Derived : public Variable<int>
{
public:
Derived (int v) : Variable<int> (v) {}
virtual void Callback (const char *values, ...) {
}
};
Теперь вы можете использовать:
int a=0;
double b = 0;
Variable<int>* derived = new Derived(3);
derived->Callback("");
derived->Callback("df", a, b);
Вам нужен аргумент values , чтобы получить оставшиеся аргументы внутри метода. Вам также нужно знать типы аргументов и передавать их, как это делает printf.
Этот метод подвержен ошибкам, поскольку вы должны сопоставлять типы аргументов значения с реальными типами аргументов.