C++ 比较c+的输入参数+;宏

C++ 比较c+的输入参数+;宏,c++,macros,C++,Macros,我有这样一个宏: #define M(x) #define M(x) if(x == void) do not return anything else print a output 我想检查x,它是否等于void。诸如此类: #define M(x) #define M(x) if(x == void) do not return anything else print a output

我有这样一个宏:

#define M(x)
#define M(x)
    if(x == void)
        do not return anything
    else
        print a output 
我想检查x,它是否等于
void
。诸如此类:

#define M(x)
#define M(x)
    if(x == void)
        do not return anything
    else
        print a output 
问题是
x
可能是任何东西。M可以用任何参数调用。 M(国际) M(字符串) M(无效)

我希望此宏可以检测输入参数为
void

更新1:更好地解释

这是一个函数生成器宏。像那样(简单代码)

我想如果ret无效,那么“return…”行被删除

更新2:忘记模板


请不要建议使用模板。这是更大解决方案的一部分。解决方案的这一小部分可以用模板来解决,但较大的解决方案必须用宏来解决。因此,请只发布与宏相关的答案,而不是模板。

您不能这样做。不是类型安全的。这是一个宏定义,用于
int
操作不能接受其他数据,如
float
。它们的解释没有进行类型检查

因此,您可以使用模板函数

#define M(x) std::is_same<x,void>::value


但我仍然感觉到,你可能想要更多。因此,试着给出一个好的可验证示例,其中包含您想要的所有内容。

另一种选择是使用模板:

template <typename T> void M(){
    if(std::is_same<T,void>::value){
        std::cout << "void!\n";
    }
    else{
        std::cout <<"Not void!\n";
    }
}

int main(){
    M<void>();
    M<int>();
}
template void M(){
if(std::is_same::value){

STD::CUT不能。C++使用模板来完成这个“忘记模板”。你需要解释为什么你不能用模板来处理这个小的问题。混合模板和宏没有什么错(通常是最好的方法)。你还需要解释为什么<代码> RET名称(){返回CaloLoToSurvie();
不适用于您。我有一个名为noron的项目:在这个项目中,我有一个名为peer generator的工具,这个工具生成一个类。我希望避免使用这个工具,并用宏替换它。开发人员使用宏在接口类中定义方法。这个宏应该每个自动生成5个方法。这些方法应该在中定义接口类,并且是可调用的(与普通方法一样)所以模板不是一个好主意。我写了420行宏来检测和解析方法参数等。但问题是这些方法对非void类型有返回语句。问题不是临时存储变量。问题是:>这些只对void类型给出错误,因为对象无法返回void@BlackDalY如果要将变量临时存储,则不能对
void
和其他类型使用相同的宏。或许可以用更大的图片描述问题中的确切问题,以便人们能够提供帮助。