【发布时间】:2022-01-10 18:24:25
【问题描述】:
根据Implicit conversion when overloading operators for template classes 中的答案,我能够编写以下代码,并且运行良好(简化示例):
namespace my_library {
template <typename T>
struct Number {
T n;
inline Number(T n) : n(n) { }
friend Number<T> operator+(const Number<T> &a, const Number<T> &b) {
return Number<T>(a.n + b.n);
}
};
}
int main() {
return (int) (4 + my_library::Number<double>(3)).n; // returns 7
}
我要做的就是使operator+ 不在Number 的定义中内联(但保留在头文件中),而一切仍然以相同的方式工作 - 请参阅main 中的表达式功能。请注意,它要求将整数 4 隐式转换为 double,然后再转换为 Number<double>。我关注了链接到Binary operator overloading on a templated class 的评论,但该解决方案不起作用 - 重载的运算符不再匹配。有什么方法可以使这项工作并使操作员的主体在struct 定义之外? (不会使操作员界面复杂化或添加更多重载 - 在这些情况下,我宁愿将其保持内联。)
【问题讨论】:
标签: c++ templates operator-overloading implicit-conversion