次のような加算器ファンクターを定義、インスタンス化、および使用するとします。
class SomeAdder {
public:
SomeAdder(int init_x): x(init_x) {}
void operator()(int num) { cout << x + num <<endl; }
private:
int x;
};
SomeAdder a = SomeAdder (3);
a(5); //Prints 8
SomeAdder b(5);
b(5); //Prints 10
コンストラクターとオーバーロードされた()
演算子は両方とも二重括弧を使用して呼び出され、同じタイプのパラメーターを持ちます。SomeAdder
コンパイラは、正しい動作を実装するために、のインスタンス化および「関数呼び出し」中に使用する関数をどのように決定しますか?答えは一見明らかなようですが、私はこの考えに頭を悩ませることはできません。
御時間ありがとうございます!