C++ 禁用来自代码库的函数调用

C++ 禁用来自代码库的函数调用,c++,C++,基于一个陈述不当且最近被删除的SO问题(“有可能不调用函数而调用函数吗?”),我有一个类似的问题,希望从更符合逻辑的角度提出 从代码库中禁用函数调用是否可能/最佳做法是什么?禁用该函数并不意味着通过对整个代码进行greing来手动注释掉该函数(这是一项有效但有点繁琐的任务)。我能想到的唯一办法是 一进入函数就返回 ret_type foo() { return ret_type(); // actual implementation is not allowed to run }

基于一个陈述不当且最近被删除的SO问题(“有可能不调用函数而调用函数吗?”),我有一个类似的问题,希望从更符合逻辑的角度提出

从代码库中禁用函数调用是否可能/最佳做法是什么?禁用该函数并不意味着通过对整个代码进行greing来手动注释掉该函数(这是一项有效但有点繁琐的任务)。我能想到的唯一办法是

  • 一进入函数就返回

    ret_type foo()
    {
        return ret_type();
        // actual implementation is not allowed to run
    }
    
  • 当调用函数使用返回代码时,这将有点危险

  • 用空闲宏替换声明

    ret_type foo();
    #define foo() do { void; } while (0);
    
  • 有没有一个标准的方法,可能是编译器钩子,一个pragma指令来实现这一点,如果没有,还有什么其他的方法

    有没有一个标准的方法,可能是编译器钩子,一个pragma指令来实现这一点,如果没有,还有什么其他的方法

    让我们一起思考一下。让我们考虑两个主要的例子:

    • 函数返回
      void
    • 函数返回一些东西
    在第一种情况下,您可以简单地获取函数体并将其注释掉。吊杆:禁用

    在第二种情况下,您有一个返回值。让我们考虑其他两种情况:

    • 使用返回的值
    • 未使用返回的值
    在第一种情况下,您应该问自己:我可以返回一个伪值并处理它吗?如果答案是肯定的,那么就这样做。如果没有,那么除了重构整个代码之外,您就什么也做不了


    在第二种情况下,您可以将其注释掉,但是为什么您首先返回一个值。

    抛出一个异常怎么样??@πάνταῥεῖ 好吧,这意味着改变返回类型,如果我没有抓住它。。。还有一些问题。禁用我的意思是“好像它从未被写过”,在这种情况下,投掷并不是我们所追求的黑客。(‘不要这样误用异常’你说,但我不允许引用你的话,我想)‘不要这样误用异常’你说‘哦,是吗?实际上我不记得上下文,但很可能是我说的。嗯,我不确定你的预处理器破解,至少我会用括号来替换:
    {do{void;}while(0);}
    。但是,任何一个象形的C++编译器都应该优化调用这个代码的所有调用。是的,只有一种类型的函数可以被禁用是合乎逻辑的,所以它更像是一种设计类型的东西。当我可以将枚举定义为返回值时,我总是使用
    no\u action
    成员。。。以防万一。不过我想你已经报道过了。