ちなhoge[&X]の場合の伝統的な関数オブジェクト版はこういったカンジになるヨカン↓↓↓
#include <stdio.h>
class Hoge {
 int& m_x;
 Hoge(int x) : m_x(x) { }
 int operator(int a, int b) const { return a + b + m_x; }
};
int main() {
 int X = 10;
 Hoge hoge(X);
 int c = hoge(2, 3);
 printf("c=%d\n", c); // 15

 X = 20;
 int c2 = hoge(2, 3);
 printf("c2=%d\n", c2); // 25
}