从c ++方法返回多种类型?

时间:2014-10-11 18:33:12

标签: c++ generics if-statement return-value

c ++中的函数是否可以返回多种类型。例如,

"return multiple types" getType( string choice )
{
     if(choice == "A"){
        ObjectA obj;
          return obj;
     }
     if(choice == "B"){
        ObjectB obj;
          return obj;
     }
     else
        return nullPtr;

}

此处,ObjectAObjectB是两种不同的类型。根据用户选择,返回任一类型的Object。这甚至可能吗?谢谢你的帮助。

**编辑:**方法将按如下方式使用

template <typename T>
void doStuff(T thing)
{
    cout << thing.num << endl;
}

用法

 doStuff(getType(selection));

ObjectAObjectB都包含一个名为num的公共变量。

2 个答案:

答案 0 :(得分:3)

这根本不可能。

C ++不是一种脚本语言,并且是静态类型的,没有反射。函数返回类型(如变量类型)必须是编译时定义的,并且不能依赖于运行时执行。

你可以做的是让ObjectAObjectB有一个共同的多态基础并返回一个指针或引用它:静态类型将是那个公共基础,运行时类型将是实际的对象(它将响应虚函数,可以通过dynamic_cast

到达

或者您可以使用&#34;类型取消&#34;技术(如boost :: any),它基本上将静态类型对象包装到另一个具有由处理程序管理的公共库的对象中。

在任何情况下都需要一些运行时类型的多态(在对象或包装器中)。

答案 1 :(得分:0)

返回任何对象的指针,然后你可以在别处进行任何类型检查。