C++ C++#为函数定义宏

C++ C++#为函数定义宏,c++,macros,C++,Macros,我有一个用于定义的头文件。我想为每个内置类型提供一个max和min函数 我使用以下宏: #define DEFINE__MIN_MAX(type) \ inline type max(type x, type y) { return (x>y) ? x : y ; } \ inline type min(type x, type y) { return (x<y) ? x : y ; } 我正在Windows中使用QtCreator 3.0.1尝试此操作。我不知道如

我有一个用于定义的头文件。我想为每个内置类型提供一个max和min函数

我使用以下宏:

#define DEFINE__MIN_MAX(type) \
   inline type max(type x, type y) { return (x>y) ?  x : y ; } \
   inline type min(type x, type y) { return (x<y) ?  x : y ; }
我正在Windows中使用QtCreator 3.0.1尝试此操作。我不知道如何处理这个错误


欢迎任何意见

小错误:定义中有一个双下划线,但调用中只使用一个下划线。换线

#define DEFINE__MIN_MAX(type) \


它应该可以正常工作。

远离宏。C++为几乎所有宏的标准用法提供了类型安全的替换。对于您的情况,如果您希望每个类型T都有一个min和max函数,请将其表示为一个模板:

template<typename T> T const& min(T const& x, T const& y) {
    return (x < y) ? (x) : (y);
}

template<typename T> T const& max(T const& x, T const& y) {
    return (x > y) ? (x) : (y);
}
模板T常量和最小值(T常量和x,T常量和y){
回报率(xy)?(x):(y);
}

或者使用标准库中的
std::min
std::max

您使用的是。这些已经作为模板存在于
中。有没有理由不扔掉宏而只使用一(对)个模板函数?您通过额外的工作有效地完成了一个函数模板。mah是对的,你应该只写一个函数模板。@chris:我没有包括在内。它不应该识别已经定义的最大值和最小值,不是吗?@user3389943,其他一些头仍然可以包含它。不管怎么说,我的观点是使用其中的那些,而不是重新发明轮子。很好。这允许在
intuseMoveContuctor(min(Int(1)、Int(2))等情况下移动如果Int有一个移动构造函数,对吗?我想知道为什么即使在C++14中,std::min和std::max仍然像我的答案中那样定义。向后兼容性?等等,我刚刚意识到我的代码是错误的,并且不会编译,因为它无法在编译时确定返回类型>。但是我认为在C++11上定义像
template t&&min(t&&x,t&&y){return(x
这样的函数是有意义的。知道为什么std::min不是这样定义的吗?我假设是向后兼容的,不过我不确定是否有人可以肯定
#define DEFINE_MIN_MAX(type) \
template<typename T> T const& min(T const& x, T const& y) {
    return (x < y) ? (x) : (y);
}

template<typename T> T const& max(T const& x, T const& y) {
    return (x > y) ? (x) : (y);
}