在c ++中将字符串转换为运算符的别名

时间:2012-05-13 22:53:42

标签: c++ operators

我试图弄清楚如何在c ++中动态地将比较运算符应用于两个变量。例如:

我有一个数据列表,例如:

#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语句来执行此操作,但是有更优雅的方法可以执行此操作,例如:< / p>

return val1 cmpr_string val2;

其中val1 = all_records[0]['price']val2 = 190cmpr_string是&gt;比较运算符(从“&gt;”字符串转换为比较运算符。基本上,我想我正在寻找一种方法将字符串转换为某种运算符的别名,可以像原始运算符一样使用。它会如果我还可以将其用于除比较运算符之外的运算符(例如,+-),那就太棒了。

请注意,我使用boost::variant作为all_records,因为实际上,这就是我将要做的事情(每个值对于列表的不同成员可以是不同的类型)。如果它更容易,我可以放入一个系统,以确保在all_records的不同行中具有相同键的对具有相同的类型。因此,如果all_records[0]['price']double,那么对于所有double

,它将是all_records[n]['price']

0 个答案:

没有答案