我遇到了以下用例,但我找不到合适的解决方案。
有没有办法替换字符串&#34;&lt;&#34;或&#34;&gt;&#34;条件<
或>
处于if
状态?
示例:
string condition = "<";
if (10 condition 8) // Here I want to replace condition with <
{
// Some code
}
我不想这样做:
if ("<" == condition)
{
if (10 < 8)
{
}
}
else if (">" == condition)
{
if (10 > 10)
{
}
}
我的病情会在运行期间发生变化。如果存在于上面,我只是在寻找一种简单的方法。
用例:用户将提供如下查询:
input: 10 > 9 => output: true
input: 10 < 7 => output: false
基本上我需要解析这个查询,因为我将这3个单词(10,&gt;,9)作为字符串,并且我想以某种方式转换字符串&#34;&gt;&#34;或&#34;&lt;&#34;到实际符号>
或<
。
答案 0 :(得分:5)
您可以通过std::less
或std::map
将字符串映射到标准库比较器仿函数,例如std::unordered_map
。
答案 1 :(得分:5)
您无法在C ++中创建新的运算符( Can I create a new operator in C++ and how? )。我可以看到你从这个想法来自哪里,但语言不支持这一点。但是,您可以创建一个函数,该函数接受两个操作数和一个字符串“argument”并返回适当的值。
bool CustomCompare(int operand1, int operand2, string op)
{
if (op == "<")
{
return operand1<operand2;
}
if (op == ">")
{
return operand1>operand2;
}
if (op == "_")
{
return DoTheHokeyPokeyAndTurnTheOperandsAround(operand1, operand2);
}
}
答案 2 :(得分:3)
std::function<bool(int,int)> comparator = std::less;
if(comparator(10, 8))
{
//some code
}
另见:
答案 3 :(得分:0)
如果你是一个C ++忍者,并且你非常顽固地让它按照你希望的方式工作,那么就有办法,但它是先进而复杂的。
我主要为POSIX编写VxWorks代码,但我想其他任何代码都可以。{/ p>
让我们说:string myExpression = "mySize > minSize";
ccppc
,gcc
,gpp
,无论您拥有什么工具链。)mySize
&amp;的ELF重定位。 minSize
(我认为如果您自定义ld
命令,可以使用app-load完成。ld
所有这一切,我不建议你这样做:
我能看到的唯一专家是,这种方法支持 C 提供的所有功能! BitWise,+ - / * ^ !,甚至可以用作pow()等。
更好一点是:
将函数编译为:
`"bool comparer_AB(int a, int b) { return a " + operator + "}"`
然后拨打comparer_AB();
。
答案 4 :(得分:0)
#include <functional>
#include <map>
#include <string>
int main()
{
using operation = std::function<bool(int,int)>;
std::map<std::string, operation> mp =
{{"<", std::less<int>()},
{">", std::greater<int>()}};
int x = 5;
int y = 10;
std::string op = "<";
bool answer = mp[op](x, y);
}