创建一个变量来保存不同类型的对象C.

创建一个变量来保存不同类型的对象C.,第1张

概述我有3个不同的对象A,B和C.根据给定的参数,我想在这些不同的对象中进行选择.在编程中, class A { public: void printHello() { cout << "HELLO A" << endl; }}; class B { public: void printHello() { cout << "HELLO B" << endl; } 我有3个不同的对象A,B和C.根据给定的参数,我想在这些不同的对象中进行选择.在编程中,

class A {   public:     voID printHello() { cout << "HELLO A" << endl; }}; class B {   public:     voID printHello() { cout << "HELLO B" << endl; }  };class C {    public:      voID printHello() { cout << "HELLO C" << endl; }  }; int main () {     string key = "c";     A a;     B b;     C c;     Object obj; // I don't kNow how to declare Object.     if (key == "a") obj = a;     else if (key == "b") obj = b;     else obj = c;    obj.printHello(); // print Hello C.    return 0; }

我考虑过模板和结构对象.但到目前为止他们都没有工作.

template<typename T1,T2,T3> T1 getType(string key,T1 t1,T2 t2,T3 t3) { // this is problem coz return types are different.    if (key == "a") return t1;     else if (key == "b") return t2;     else return t3; }

创建Object o很容易;在JAVA中,因为Java中的每个对象都是Object类的子类.但是我如何在C中实现这一目标?

编辑.
我不能改变A,B和C类.我得到了这些课程,我的目标是实现main方法.所以,继承对我来说是不可能的.对不起任何困惑.

任何帮助表示赞赏.

解决方法 您正在寻找变体类型.在C 17中有一个即将推出的std :: variant,以及在boost和Web上的C 11兼容版本. boost::variant的示例:

struct visitor{    voID operator()(const A&){ cout << "HELLO A" << endl; }    voID operator()(const B&){ cout << "HELLO B" << endl; }    voID operator()(const C&){ cout << "HELLO C" << endl; }};int main(){    visitor v;    // `obj` is either an `A`,a `B` or a `C` at any given moment.    boost::variant<A,B,C> obj{B{}};    //                         ^^^^^    //                   Initialize with `B`.    boost::apply_visitor(v,obj); // prints "HELLO B"    obj = A{};    boost::apply_visitor(v,obj); // prints "HELLO A"}
总结

以上是内存溢出为你收集整理的创建一个变量保存不同类型的对象C.全部内容,希望文章能够帮你解决创建一个变量来保存不同类型的对象C.所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存