有没有一种方法可以在C++中定义MACRO来生成按输入类型区分的内容

Is there a way to define MACRO in C++ to generate content differentiated by input type?

本文关键字:MACRO 输入 类型区 定义 一种 方法 C++ 有没有      更新时间:2023-10-16

参考下面的代码,我希望宏'bar'可以被预编译到注释显示的内容。

#define bar(x) if(x is int) foo_int(x); else if (x is float) foo_float; else (x);
int main()
{
    bar(123); // -> foo_int(123);
    bar(1.0f); // -> foo_float(1.0f);
    bar(false); // -> false;
}

对于此作业(以及大多数其他作业),宏是错误的工具。你可以用一个模板来做这件事,无论哪种类型需要特殊处理,都会超载:

template <typename T> T bar(T x) {return x;}  // generic template
int bar(int x) {return foo_int(x);}           // overload for int
float bar(float x) {return foo_float(x);}     // overload for float

在C++14中,只需执行:

auto bar(int i) { return foo_int(i); }
auto bar(float f) { return foo_float(f); }
template <typename T>
auto bar(T&& t) { return std::forward<T>(t); }

在C++11 中

#define Return(x) decltype(x) {return x;}
auto bar(int i) -> Return(foo_int(i))
auto bar(float f) -> Return(foo_float(f))
template <typename T>
auto bar(T&& t) -> Return(std::forward<T>(t))