我试图弄清楚为什么以下情况在我正在使用的图书馆中不起作用。我有3个可以像这样相乘的类:
class Thing1 { /* ... */ };
class Thing2 { /* ... */ };
class Thing3 { /* ... */ };
这三个对象之间的关系为Thing1 * Thing2 = Thing3,并且每个对象都可以乘以两倍。我有一个模板运算符*:
template <typename T>
T operator* (const T&, double) { /* ... */ }
template <typename T, typename U, typename V>
V operator* (const Thing1&, const Thing2&) { /* ... */ }
我尝试像这样显式实例化运算符:
template Thing1 operator* <Thing1> (const Thing1&, double);
template Thing2 operator* <Thing1> (const Thing2&, double);
template Thing3 operator* <Thing1> (const Thing3&, double);
template Thing3 operator* <Thing1, Thing2, Thing3> (const Thing1&, const Thing2&)
但是,当我稍后尝试使用此运算符时,出现编译错误,“没有运算符与这些操作数匹配,操作数类型为:Thing1 * Thing2”。奇怪的是,前三个模板的实例化与预期的一样,但没有最后一个模板。即使我注释掉对第一个运算符*的任何引用,最后一个实例仍不会实例化。为什么未实例化此模板?在此先感谢您的帮助!