c – 如何动态转换模板类
发布时间:2020-12-16 06:51:36 所属栏目:百科 来源:网络整理
导读:我正在尝试围绕以下类模板编写API: template class A,class Bclass MyClass { public: A foo; B bar; MyClass(); MyClass(A in1,B in2) { foo = in1; bar = in2; } void operator = (MyClassA,B in) { foo = in.foo; bar = in.bar; }}; 作为此API的一部分,
我正在尝试围绕以下类模板编写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; } 编译时此代码没有错误. 我的问题: 示例实施: /* * --- 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; } 解决方法
答:是的.
但是你必须提供所有C操作符C(A)和D操作符D(B)的VARIANTS,你需要一个像这样的复制构造函数: class MyClass { public: A foo; B bar; MyClass(MyClass &cpy)// copy constructor { foo = cpy.foo; bar = cpy.bar; } MyClass(A in1,B in2) { foo = in1; bar = in2; } }; 需要复制构造函数才能工作: return out; 在MyClass(A in1,B in2)方法中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |