Похоже, D1[0](6, 7)
должен выполнить 6 + 7
, возвращая int
, а D1[0](1, 2)
должен выполнить 1 + 2
, также возвращая int
. Таким образом, добавление в D1[0](6, 7) + D1[0](1, 2)
является обычным добавлением int
.
Другими словами, вы не должны перегружать Delegate::operator+
, вместо этого вы должны написать что-то вроде
XXX Delegate::operator[](int i) const
{
...
}
где XXX
- это функция типа type, которая будет выполнять сложение с более поздними параметрами.
Так что XXX
будет выглядеть примерно так:
class XXX
{
public:
int operator()(int x, int y) const
{
...
}
...
};
Но XXX
придется выполнять сложение, или вычитание, или что-то еще, в зависимости от ситуации.
Таким образом, выражение D1[0](6, 7)
становится temp(6,7)
, где temp - это объект вышеописанного типа XXX
.
At по крайней мере, это моя лучшая интерпретация. Понятно, что вы неправильно поняли свои требования.