不能单独通过返回类型来区分超载功能,但这不是一个真正的错误

发布于 2025-01-21 14:39:04 字数 691 浏览 0 评论 0原文

我有某些功能的不同变体,这些功能是由预处理器定义选择的

    #if defined(V2)
        bool getAICoord(TTT_Game& game) {
    
            //
            // 4x4 field
            //
    
            return false;
        }
    #elif defined(V3)
        bool getAICoord(TTT_Game& game) {
    
            //
            // renju field
            //
    
            return false;
        }
    #else // V1 
        bool getAICoord(TTT_Game& game) {
            // some code
            return false;
        }
    #endif

,并且它的编译很好,但是IntelliSense会给我错误

无法单独通过返回类型区分

我知道它不是完美的,但是IS是有什么方法可以将此功能排除在其清单之外或类似的清单之外?

I have different variants of some function, that are choosed by preprocessor definition

    #if defined(V2)
        bool getAICoord(TTT_Game& game) {
    
            //
            // 4x4 field
            //
    
            return false;
        }
    #elif defined(V3)
        bool getAICoord(TTT_Game& game) {
    
            //
            // renju field
            //
    
            return false;
        }
    #else // V1 
        bool getAICoord(TTT_Game& game) {
            // some code
            return false;
        }
    #endif

And it compiles well, but IntelliSense gives me error

cannot overload functions distinguished by return type alone

I know, that it is not perfect, but is there any way to exclude this one function from its checklist or something like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七分※倦醒 2025-01-28 14:39:04

您可以仅键入一次函数签名并使用功能正文上的预处理器定义来解决此错误;例如

bool getAICoord(TTT_Game& game) {
#if defined(V2)
    //
    // 4x4 field
    //
    return false;
#elif defined(V3)
    //
    // renju field
    //
    return false;
#else // V1
    // some code
    return false;
#endif
}

You could workaround this error by only typing the function signature once and using the preprocessor definitions on the body of the function; e.g.

bool getAICoord(TTT_Game& game) {
#if defined(V2)
    //
    // 4x4 field
    //
    return false;
#elif defined(V3)
    //
    // renju field
    //
    return false;
#else // V1
    // some code
    return false;
#endif
}
笛声青案梦长安 2025-01-28 14:39:04

预处理器宏众所周知,因为它们是代码的纯文本转换,而不是作为语言本身的一部分。

而不是使用宏,如果Constexpr使您可以作为语言本身的一部分进行有条件的汇编,而不是作为预处理程序的步骤:

这具有许多优点:

  • 它使IDS少得多。
  • 即使排除在外,所有代码路径也会获得句法验证。
constexpr int kVersion = SOME_DEFINE;

bool getAICoord(TTT_Game& game) {
  if constexpr(kVersion == 3) {
      //...    
  } else if constexpr(kVersion == 2) {
      //...
  } else {
      //...
  }
}

Preprocessor macros notoriously confuse IDEs, as they are pure text transformation of the code, instead of being part of the language itself.

Instead of using macros, if constexpr lets you do conditional compilation as part of the language itself instead of doing it as a preprocessor step:

This has a number of advantages:

  • It confuses IDEs a lot less.
  • All code paths get syntactical validation, even when excluded.
constexpr int kVersion = SOME_DEFINE;

bool getAICoord(TTT_Game& game) {
  if constexpr(kVersion == 3) {
      //...    
  } else if constexpr(kVersion == 2) {
      //...
  } else {
      //...
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文