【发布时间】:2014-12-07 21:17:32
【问题描述】:
给定以下代码:
struct Zero{};
template<typename T>
Zero operator*(const Zero& zero, const T& other){return Zero();}
struct Identity{};
template<typename T>
T operator*(const T& other, const Identity& id){return T();}
现在,我想像这样使用这段代码:
Zero z;
Identity id;
int i = 5;
z * i; // ok
i * id; // ok
z * id; //error: ambiguity in function resolution
编译器将无法解析最后一行中的运算符,因为这两个函数都可以使用。事实上,在这种情况下,我不在乎使用哪个函数,因为它们具有相同的功能。在这两种情况下 Zero() 都会按预期返回。
我的问题:我该如何表达在这种情况下任何功能都可以使用?
【问题讨论】:
-
顺便说一句:你可能想看看
constexpr。
标签: c++ templates overloading operator-keyword specialization