C++ 我们如何将这个if语句转换为一个";开关";
假设我们有以下C++ 我们如何将这个if语句转换为一个";开关";,c++,if-statement,switch-statement,C++,If Statement,Switch Statement,假设我们有以下if语句: if (arg.compare("abc") == 0) { ... } 如果我想将其转换为一个开关表单,以下是否正确 switch (arg) { case "arg.compare("abc") == 0: cout<<"statements the same"; break; } 开关(arg) { case“arg.compare(“abc”)==0:cout如果可能出现以下切换语句: switch (arg) { case arg.co
if语句
:
if (arg.compare("abc") == 0)
{
...
}
如果我想将其转换为一个开关
表单,以下是否正确
switch (arg)
{
case "arg.compare("abc") == 0: cout<<"statements the same";
break;
}
开关(arg)
{
case“arg.compare(“abc”)==0:cout如果可能出现以下切换语句:
switch (arg)
{
case arg.compare("abc1") == 0: cout << "statements the same1";
break;
case arg.compare("abc2") == 0: cout << "statements the same2";
break;
}
开关(arg)
{
case arg.compare(“abc1”)==0:cout如果字符串集是静态已知的(在开发时,例如,因为它是一组已知的关键字或标识符),您可能希望使用类似的生成器
如果使用C++11进行编码,还可以使用匿名:
不可以。除非您有一个返回定义值或枚举值的函数,否则您不能。例如,对于“abc”,return 11您实际上是在尝试为不同的字符串添加大小写,还是只是想了解switch/case
的工作原理?
if(arg.compare("abc1") == 0) cout << "statements the same1";
// no break is needed
else if(arg.compare("abc2") == 0) cout << "statements the same2";
// no break is needed
if(arg.compare("abc1") == 0)
{
cout << "statements the same1";
}
else if(arg.compare("abc2") == 0)
{
cout << "statements the same2";
}
std::map<std::string, std::function<void(const std::string&)>
funmap = {
{ "abc", [&](const std::string& name)
{ std::cout << name; } },
{ "cde", [&](const std::string& name)
{ do_something_with(name); } },
};
auto it = funmap.find(somestring);
if (it != funmap.end()) it->second(somestring);