C++の2つの変数に比較演算子を動的に適用する方法を理解しようとしています。例えば:
次のようなデータのリストがあります。
#include <boost/variant/variant.hpp>
#include <list>
typedef boost::variant< short, int, long, long long, double, string > flex;
typedef pair<string, flex> flex_pair;
typedef list< flex_pair > row_entry;
list< row_entry > all_records; // This is the primary list
list< row_entry >::iterator all_records_it; // An iterator to move through the primary list
all_records
ここで、次のような行があるとしましょう。
all_records[0]["price"] = 220.45;
all_records[0]["time"] = 1336948802;
all_records[0]["name"] = "some item";
all_records[1]["price"] = 180.0;
all_records[1]["time"] = 1336948102;
all_records[1]["name"] = "another item";
私はこのようなことをしたいです:
comparer(all_records[0]['price'], 190, ">");
これはif(all_records[0]['price'] > 190)
、真と評価されるかどうかをテストして返すかどうかをテストします。同様に、もし私がするなら:
comparer(all_records[0]['price'], 190, "==");
if(all_records[0]['price'] == 190)
それが真であると評価されるかどうかをテストして返します
if
一連の/else
ステートメントまたはステートメントを使用してこれを実行できることは知っていますが、これを実行するswitch
ためのよりエレガントな方法があります。たとえば、次のようになります。
return val1 cmpr_string val2;
ここval1 = all_records[0]['price']
で、、、val2 = 190
およびcmpr_string
は>比較演算子(> "文字列から比較演算子に変換されます。基本的に、文字列を次のように使用できる演算子のある種のエイリアスに変換する方法を探していると思います。元の演算子。これを、比較演算子以外の演算子(たとえば+
、 )にも使用できれば素晴らしいと思い-
ます。
boost::variant
実際には、これを実行するために使用したことに注意してくださいall_records
(各値は、リストのメンバーごとに異なるタイプになる可能性があります)。簡単にできる場合は、システムに入れて、異なる行の同じキーを持つペアがall_records
同じタイプになるようにすることができます。したがって、がでall_records[0]['price']
ある場合double
、それはdouble
すべての人になりますall_records[n]['price']