在 javascript 和许多其他编程语言中都有 switch case
。
switch(n)
{
case 1:
alert(1);
break;
case 2:
alert(2);
break;
default:
alert(3);
}
Javascript 还允许您大大缩短它。
alert({1:1,2:2}[n]||3); // literal obj , i need this.
alert([1,2][n-1]||3); // array
C++ 中有类似的东西吗?
文字对象...
更高级的例子
var
moveUp=function(){},
moveDown=function(){},
doNothing=function(){};
switch(txt)
{
case 'moveUp':
moveUp();
break;
case 'moveDown':
moveDown();
break;
default:
doNothing();
}
我更喜欢:
window.moveUp=function(){}
window.moveDown=function(){}
window.doNothing=function(){}
window[txt]?window[txt]():window.doNothing();
或者只是
window.moveUp=function(){}
window.moveDown=function(){}
!window[txt]||window[txt]();
window
可以是任何其他(自定义或预定义的)对象。
最佳答案
std::map
对此效果很好。您可以使用大括号符号创建它:
std::map<int, int> m = { {1,1}, {2,2}, {3, 3} };
这样方便以后使用:
f((std::map<int, int>{ {1,1}, {2,2}, {3,3} })[1]);
但是,根据您处理丢失键的需要,您可能需要为此编写一些帮助程序。
为了更接近第二个示例中的内容:
void f ();
void g ();
f((std::map<std::string, std::function<void(void)> { {"a", f}, {"b", g} })["a"]);
坦率地说,如果我是你,我会停止用 C++ 编写 JS。它们是两种不同的语言,具有不同的做法和习语。将“聪明的”JS oneliners 硬塞进 C++ 语法中并不是一个好主意。
关于javascript - 用 javascript 中的文字对象替换 switch case(在 c++ 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914550/