【发布时间】:2017-08-23 05:22:08
【问题描述】:
我有 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;
}
在JAVA 中创建Object o; 很容易,因为Java 中的每个对象都是Object 类的子类。但是如何在 C++ 中实现这一点?
编辑。
我无法更改课程A、B 和C。我得到了这些类来使用,我的目标是实现main 方法。所以,inheritance 对我来说是不可能的。很抱歉有任何混淆。
感谢任何帮助。
【问题讨论】:
-
好像是继承?
-
在 Java 中,每个类都隐式继承自
Object。您可以通过自己编写抽象类Object在 C++ 中模拟同样的事情。 -
看看std::any。
-
您不需要所有东西都继承自的
Object类。你只需要你自己的基类,所有你的类都继承自。 -
您甚至不需要将您的类型与基类耦合。变体是这种情况的完美解决方案。
标签: c++ c++11 templates object variable-declaration