javascript - 用 javascript 中的文字对象替换 switch case(在 c++ 中)

标签 javascript c++

在 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/

相关文章:

javascript - 弹出键盘时向上滚动文本字段

javascript - 在 JQuery 回调中获取元素

c++ - 多种类型的锯齿状数组

C++ 从文件中读取整数和字符串

在函数之间传递地址值时出现 C++ 段错误

c++ - 为什么 boost 可选引用不是 T* 的包装器?

c++ - GCC 5 ABI 更改

javascript - Javascript如何解释这个参数错误?

javascript - 使用普通 JS Promise 编写 jQuery AJAX 请求

javascript - 如何在 Backbone View 中访问 Rails 配置信息?