要在两个比较函数之间进行选择,我可以编写以下代码:
const float& (*cmp)(const float&, const float&);
if (cmp_type >= 0)
cmp = &std::max;
else
cmp = &std::min;
我想使用?:表达式将它组合到一行:
const float& (*cmp)(const float&, const float&)(cmp_type >= 0 ? &std::max : &std::min);
但不幸的是,在这种情况下,与:
const float& (*cmp)(const float&, const float&)(&std::max);
std::max的两个定义在?:表达式中冲突:
template<typename _Tp> inline const _Tp& max(const _Tp& __a, const _Tp& __b);
template<typename _Tp> inline _Tp max(initializer_list<_Tp> __l);
从而导致编译错误。
要使?:表达式工作,我有哪些选择?
您可以创建一个typedef
并使用它来static_cast
以获得正确的重载。
using cmp_t = const float&(*)(const float&, const float&); // typedef
cmp_t cmp = cmp_type>=0 ? static_cast<cmp_t>(std::max) :
static_cast<cmp_t>(std::min);