gpt4 book ai didi

c++ - block 嵌套太深

转载 作者:可可西里 更新时间:2023-11-01 18:20:45 25 4
gpt4 key购买 nike

我有一些不典型的问题。我向用户提供了 sendText() 函数。他可以输入例如

sendText( "mytext{newline}text{up}" )

{text} 是允许用户发送的特殊 key 。有很多可用的特殊键。

所以我的第一步是获取 {} 括号之间的字符串并创建:

if( _specialKey == "newline" ) {
// action for VK_RETURN
} else if( _specialKey == "up" ) {
// action for VK_UP
} else .....

例子:

if( specialKey == "n" ) {
// enter click
unsigned short key = VK_RETURN;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "n+" ) {
// enter down
inputs.push_back( keyDown( VK_RETURN ) );

return 2;
} else if( specialKey == "n-" ) {
// enter up
inputs.push_back( keyUp( VK_RETURN ) );

return 2;
} else if( specialKey == "t" ) {
// tabulator click
unsigned short key = VK_TAB;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "t+" ) {
// tabulator down
inputs.push_back( keyDown( VK_TAB ) );

return 2;
} else if( specialKey == "t-" ) {
// tabulator up
inputs.push_back( keyUp( VK_TAB ) );

return 2;
} else if( specialKey == "caps" ) {
// caps lock click
unsigned short key = VK_CAPITAL;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "caps+" ) {
// caps lock down
inputs.push_back( keyDown( VK_CAPITAL ) );

return 2;
} else if( specialKey == "caps-" ) {
// caps lock up
inputs.push_back( keyUp( VK_CAPITAL ) );

return 2;
} else if( specialKey == "ralt" ) {
// right alt click
unsigned short key = VK_RMENU;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "ralt+" ) {
// right alt down
inputs.push_back( keyDown( VK_RMENU ) );

return 2;
} else if( specialKey == "ralt-" ) {
// right alt up
inputs.push_back( keyUp( VK_RMENU ) );

return 2;
} else if( specialKey == "lalt" ) {
// right alt click
unsigned short key = VK_LMENU;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "lalt+" ) {
// right alt down
inputs.push_back( keyDown( VK_LMENU ) );

return 2;
} else if( specialKey == "lalt-" ) {
// right alt up
inputs.push_back( keyUp( VK_LMENU ) );

return 2;
} else if( specialKey == "rctrl" ) {
// right alt click
unsigned short key = VK_RCONTROL;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );

return 2;
} else if( specialKey == "rctrl+" ) {
// right alt down
inputs.push_back( keyDown( VK_RCONTROL ) );

return 2;
} else if( specialKey == "rctrl-" ) {
// right alt up
inputs.push_back( keyUp( VK_RCONTROL ) );

return 2;
} else if( specialKey == "lctrl" ) {

但是编译器说:

fatal error C1061: compiler limit : blocks nested too deeply

我解决它的第一个想法是定义一个映射,它将存储映射到某个整数的所有特殊键(作为字符串)。然后我可以这样做:

switch( map[key] ) {
case 0:
...
}

但我不确定编译器是否也不会提示它。有很多要改的,所以我不想改无果。

或者您有其他更好的想法吗?

谢谢。

最佳答案

您有超过 127 个 else if block 。虽然这应该可以编译,而且它肯定是 Microsoft C++ 编译器中的一个错误,但它仍然是一个非常强烈的气味,表明您的代码有问题。

您在控制流中存储数据,这 128 个 block 中的绝大多数是冗余复制和粘贴 block 。如果可能的话,你不应该这样做。分离代码和数据,对特殊情况使用控制流,同时将所有常见情况重构为单个 HashMap ,将其作为一种类型处理。

关于c++ - block 嵌套太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com