C++ 如何使用预处理器检查不同类别中是否存在符号?

C++ 如何使用预处理器检查不同类别中是否存在符号?,c++,c-preprocessor,preprocessor,conditional-compilation,C++,C Preprocessor,Preprocessor,Conditional Compilation,好的,我想知道我是否能够检查另一个文件中是否有符号 #ifdef symbol //it exists #endif 或 原因是我想检查另一个文件(类)中是否存在一个方法,并相应地执行其他代码 编辑: 就我所见,它只检查#ifdef定义所在的文件(类)中是否存在符号 编辑#2: 有没有一种方法可以检查函数是否存在,而不必在带有SFINAE或模板的类中? 如果是,你能给我举一些例子吗?我不想用填鸭式的方法,但示例会有所帮助。对于类似的东西,预处理器是错误的工具。它主要处理简单的文本替换和

好的,我想知道我是否能够检查另一个文件中是否有
符号

#ifdef symbol
    //it exists
#endif

原因是我想检查另一个文件(类)中是否存在一个方法,并相应地执行其他代码

编辑: 就我所见,它只检查
#ifdef
定义所在的文件(类)中是否存在符号

编辑#2: 有没有一种方法可以检查函数是否存在,而不必在带有SFINAE或模板的类中?
如果是,你能给我举一些例子吗?我不想用填鸭式的方法,但示例会有所帮助。

对于类似的东西,预处理器是错误的工具。它主要处理简单的文本替换和类似的操作,实际上不解析C++。您要查看的是真正解析代码的编译器(可能是C++17中的
if constexpr
),我真正想要的是在存在方法的情况下对代码进行注释(排除)部分(这实际上是文本替换(没有任何代码))。如果你有其他想法,请告诉我好吗?@krentm“如果存在方法”使用类型特征来检查这些。如前所述,您无法使用预处理器执行此操作,您需要使用模板。也许您正在寻找?@krentm“是否有一种方法可以检查函数是否存在,而不必在带有SFINAE或模板的类中?”请将此添加到您的问题中。没有模板是不可能的。有趣的一点是,如果可以测试是否存在使用SFINAE启用某些代码的自由函数。
#ifndef symbol
    //it doesn't exist
#endif