从c+返回多个类型+;方法? < > C++中的函数是否可以返回多个类型。比如说, "return multiple types" getType( string choice ) { if(choice == "A"){ ObjectA obj; return obj; } if(choice == "B"){ ObjectB obj; return obj; } else return nullPtr; }

从c+返回多个类型+;方法? < > C++中的函数是否可以返回多个类型。比如说, "return multiple types" getType( string choice ) { if(choice == "A"){ ObjectA obj; return obj; } if(choice == "B"){ ObjectB obj; return obj; } else return nullPtr; },c++,generics,if-statement,return-value,C++,Generics,If Statement,Return Value,这里,ObjectA和ObjectB是两种不同的类型。根据用户选择,返回任意类型的对象。这可能吗?谢谢你的帮助 **编辑:**该方法将按如下方式使用 template <typename T> void doStuff(T thing) { cout << thing.num << endl; } ObjectA和ObjectB都将包含一个名为num的公共变量,无论对象是什么,都返回一个指针,然后可以在别处执行任何类型检查。无论对象是什么,都返回一个

这里,
ObjectA
ObjectB
是两种不同的类型。根据用户选择,返回任意类型的对象。这可能吗?谢谢你的帮助

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

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

ObjectA
ObjectB
都将包含一个名为
num
的公共变量,无论对象是什么,都返回一个指针,然后可以在别处执行任何类型检查。

无论对象是什么,都返回一个指针,然后可以在别处执行任何类型检查。

无论对象是什么,都返回一个指针,然后您可以在其他位置执行任何类型检查。

无论对象是什么,都返回一个指针,然后您可以在其他位置执行任何类型检查。

这根本不可能

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

您可以做的是让
ObjectA
ObjectB
拥有一个公共多态基并返回指向它的指针或引用:静态类型将是该公共基,而运行时类型将是实际对象(它将响应虚拟函数,并且可以通过
dynamic\u cast
访问)

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


在任何情况下,都需要某种运行时类型的多态性(在对象或包装中)。

这根本不可能

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

您可以做的是让
ObjectA
ObjectB
拥有一个公共多态基并返回指向它的指针或引用:静态类型将是该公共基,而运行时类型将是实际对象(它将响应虚拟函数,并且可以通过
dynamic\u cast
访问)

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


在任何情况下,都需要某种运行时类型的多态性(在对象或包装中)。

这根本不可能

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

您可以做的是让
ObjectA
ObjectB
拥有一个公共多态基并返回指向它的指针或引用:静态类型将是该公共基,而运行时类型将是实际对象(它将响应虚拟函数,并且可以通过
dynamic\u cast
访问)

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


在任何情况下,都需要某种运行时类型的多态性(在对象或包装中)。

这根本不可能

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

您可以做的是让
ObjectA
ObjectB
拥有一个公共多态基并返回指向它的指针或引用:静态类型将是该公共基,而运行时类型将是实际对象(它将响应虚拟函数,并且可以通过
dynamic\u cast
访问)

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



在任何情况下,运行时类型多态性(在对象或包装器中)是必需的。

您希望如何使用此函数的返回值?您可以尝试
boost::variant
@OliverCharlesworth返回的值将插入到具有模板参数的函数中。但是您将返回值分配给哪种类型?@OliverCharlesworth不清楚您的意思是什么?ObjectA和ObjectB都有相同的方法,可以执行不同的操作。因此,将调用template parameters方法。您希望如何使用此函数的返回值?您可以尝试
boost::variant
@OliverCharlesworth返回的值将插入到具有模板参数的函数中。但是,您会指定什么类型“OliverCharlesworth”的返回值不清楚你的意思是什么?ObjectA和ObjectB都有相同的方法,可以执行不同的操作。因此,将调用template parameters方法。您希望如何使用此函数的返回值?您可以尝试
boost::variant
@OliverCharlesworth返回的值将插入到具有模板参数的函数中。但是,您会指定什么类型“OliverCharlesworth”的返回值不清楚你的意思是什么?ObjectA和ObjectB都有相同的方法,可以执行不同的操作。因此,将调用template parameters方法。您希望如何使用此函数的返回值?您可以尝试
boost::variant
@OliverCharlesworth返回的值将插入到具有模板参数的函数中。但是,您会指定什么类型“OliverCharlesworth”的返回值不清楚你的意思是什么?ObjectA和ObjectB都有做不同事情的相同方法。因此调用了template parameters方法
 doStuff(getType(selection));