1

私はこのようなことをしたい:

int a = 9, b = 3;
map<char,operator> m;
m['+'] = +;
m['-'] = -;
m['*'] = *;
m['/'] = /;
for(map<char,operator>::iterator it = m.begin(); it != m.end(); ++it) {
    cout << func(a,b,it -> second) << endl;
}

出力は次のようになります。

12
6
27
3

どうすればいいですか?

4

1 に答える 1

6

既成のファンクターは次の場所で使用できます<functional>

int a = 9, b = 3;
std::map<char, std::function<int(int, int)>> m;

m['+'] = std::plus<int>();
m['-'] = std::minus<int>();
m['*'] = std::multiplies<int>();
m['/'] = std::divides<int>();

for(std::map<char, std::function<int(int, int)>>::iterator it = m.begin(); it != m.end(); ++it) {
    std::cout << it->second(a, b) << std::endl;
}

それぞれoperator()が2つの引数を取り、それらの2つの引数に対する数学演算の結果を返すクラスです。たとえば、std::plus<int>()(3, 4)は基本的にと同じ3 + 4です。それぞれが署名の関数ラッパーオブジェクトとして格納され、int(int, int)必要に応じて2つの番号で呼び出されます。

于 2012-11-15T01:36:14.390 に答える