Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有办法在C++;要生成按输入类型区分的内容?_C++_Macros - Fatal编程技术网

C++ 有没有办法在C++;要生成按输入类型区分的内容?

C++ 有没有办法在C++;要生成按输入类型区分的内容?,c++,macros,C++,Macros,参考以下代码,我希望宏“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; } 宏对于此作业(以及大

参考以下代码,我希望宏“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
template T bar(tx){return x;}//通用模板
int-bar(intx){return foo_int(x)}//int的重载
浮动条(float x){return foo_float(x)}//浮动重载

宏对于此作业(以及大多数其他作业)是错误的工具。您可以使用一个模板来执行此操作,该模板针对需要特殊处理的任何类型重载:

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
template T bar(tx){return x;}//通用模板
int-bar(intx){return foo_int(x)}//int的重载
浮动条(float x){return foo_float(x)}//浮动重载
在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); }
autobar(inti){return foo_int(i);}
自动条(float f){return foo_float(f);}
模板
自动条(T&&T){return std::forward(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))
#定义返回(x)decltype(x){Return x;}
自动栏(int i)->返回(foo_int(i))
自动条(浮动f)->返回(浮动(f))
模板
自动条(T&T)->返回(标准::前进(T))
在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); }
autobar(inti){return foo_int(i);}
自动条(float f){return foo_float(f);}
模板
自动条(T&&T){return std::forward(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))
#定义返回(x)decltype(x){Return x;}
自动栏(int i)->返回(foo_int(i))
自动条(浮动f)->返回(浮动(f))
模板
自动条(T&T)->返回(标准::前进(T))

< /代码>这个问题的两个真正解决方案是:1)如果<代码> bar >代码>相同,只是参数类型不同,使它成为模板函数2)如果每个类型的<代码> Bar < /C++ >行为不同,则对函数进行重载。还是说C++?这个问题的两个真正的解决方案是:1)如果代码> bar <代码>相同,参数类型不同,使它成为模板函数2。如果<代码> bar <代码>行为对于每种类型都不同,那么对函数进行重载。或者你是说C?