将开关大小写(在c++中)替换为javascript中的文字对象
Replace switch case (in c++) with literal object like in javascript
在javascript&在许多其他编程语言中存在CCD_ 1。
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++语法中不是一个好主意。
对JS不是很熟悉,但首先让我警告一下,C++很受欢迎,但不是因为它的简洁,也不是因为它友好的语法;)
我的猜测是,你可以尝试使用从你的键到可调用的映射来实现类似于你想要的东西。(如果我知道txt
是你的钥匙)
void functionFoo()
{ /* ... */ }
void functionBoo()
{ /* ... */ }
std::map<std::string, std::function<void()>> callableMap;
callableMap.insert(std::make_pair("first key", &functionFoo);
callableMap.insert(std::make_pair("second key", &functionBoo);
...
std::string key = "first key";
callableMap[key](); // invoke functionFoo
当然,您并不局限于不接受参数也不返回值的可调用函数。这是您的可调用类型:std::function<void()>
,您可以使它变得任意复杂。
对于连续值,可以用C++编写类似的代码:
void print(int n)
{
// Check that 0 <= n < 3.
using T = int[3];
std::cout << T{4, 9, 18}[n] << std::endl;
}
对于任意值,您可以像其他答案所建议的那样使用std::map
,尽管相应的构造可能是该容器的静态版本(在标准库中不存在)。
相关文章:
- 高于 U+FFFF 的字符的 Javascript 文字
- Javascript 文字对象和单例模式
- Python 将 str 转换为 JavaScript 文字字符串
- 如何在 PHP 中将 JavaScript 文字对象转换为 Json 对象
- C#中的javascript文字-避免警告
- Javascript文字函数
- 使用JavaScript[]文字的数组的长度是否真正反映了其在内存中的物理大小
- 为什么javascript文字与非文字对应物的作用不同
- 我需要一个Javascript文字语法转换器/deobfusation工具
- Javascript文字处理器/编辑器(或Google Docs架构)
- 对象数组的 Javascript 文字表示法
- JavaScript文字,键的指针值
- Javascript文字游戏
- 在JavaScript文字中使用变量作为属性名
- Javascript文字转义在IE,但不是Firefox, Chrome或Safari
- Javascript文字游戏如何使函数不替换元素
- Javascript文字vs函数oop
- ASP.NET Razor与javascript文字的混合
- Google Charts Javascript 文字数据表示法给出“Not a array”错误
- Javascript文字嵌套对象-参考顶层属性