gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:09:45 27 4
gpt4 key购买 nike

我有 3 个不同的对象 ABC。根据给定的参数,我想在这些不同的对象中进行选择。在编程中,

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;
}

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

编辑。我无法更改类 ABC。我得到了这些类来使用,我的目标是实现 main 方法。所以,inheritance 对我来说是不可能的。抱歉造成任何困惑。

感谢任何帮助。

最佳答案

您正在寻找一个 variant 类型。在 C++17 中有即将推出的 std::variant,在 boost 和网络上有 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++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43098298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com