C++ 有没有办法在C++;要生成按输入类型区分的内容?
参考以下代码,我希望宏“bar”可以预编译为注释所显示的内容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; } 宏对于此作业(以及大
#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?