我正在尝试围绕以下类模板编写 API:
template <class A, class B>
class MyClass {
public:
A foo;
B bar;
MyClass();
MyClass(A in1, B in2) {
foo = in1; bar = in2;
}
void operator = (MyClass<A, B> in) {
foo = in.foo; bar = in.bar;
}
};
作为这个 API 的一部分,我希望实现者能够在不同类型的MyClass
. 为了实现这一点,我编写了以下函数:
template<class A, class B, class C, class D>
MyClass<C, D> operator MyClass<C, D> (MyClass<A, B> in) {
MyClass<C, D> out((C)in.foo, (D)in.bar);
return out;
}
这段代码编译没有错误。
我的问题:
假设C operator C (A)
和D operator D (B)
都是为上述函数的任何给定实现定义的,这个看起来很疯狂的函数是否足以让实现者在MyClass
, (via (MyClass<C, D>)MyClass<A, B>
) 类型之间动态转换,还是我完全失去了它?
示例实现:
/*
* --- INCLUDE ABOVE CLASS DEFINITION HERE ---
*/
#include <iostream>
#include <string>
int main() {
MyClass<int, char> foo(42, 'q');
MyClass<double, std::string> bar;
bar = (MyClass<double, std::string>) foo;
}