我正在尝试在 C++ 中创建一个函数,我想知道我是否可以创建它以便它能够返回不同类型的向量。例如,根据不同的大小写,它返回向量字符串、int、double 或…任何东西。在 C++ 中可以吗? (我不想使用具有不同 arg(S) 和不同返回值的重载函数)我对 C++ 很陌生,我的问题可能看起来很愚蠢。
这是我的一段代码:
//这里的零表示相交
std::vector<??????> findZeros(const mesh::Region& s, char *model) const
{
//Point
if( model == "point" )
{
std::vector<Vertex> zeros;
for(Region::pointIterator it = s.beginPoint(); itv != s.endPoint(); ++itv )
{
if( abs(Val(*it)) < 1.e-12 )
zeros.push_back(*it);
}
std::vector<point> zerosP(zeros.begin(), zeros.end());
return zerosP;
}
//line
else if (EntityS == "line")
{
std::vector<line> zerosE;
std::vector<Point&> PointE;
for(Region::lineIterator ite = s.beginLine(); ite != s.endLine(); ++ite )
{
Line ed = *ite;
Point P0 = ed.point(0);
Point P1 = e.point(1);
if( ......... ) zerosE.push_back(ed);
else if ( ....... )
{
PontE.push_back( P0, P1);
zerosE.push_back(ed);
}
}
//这里我想返回“点”或“带有点的线”或在我们的表面上层。 //我想在一个功能中完成所有事情! }
原文由 user2090491 发布,翻译遵循 CC BY-SA 4.0 许可协议
模板
尝试这个:
您可以通过以下方式调用不同类型的此函数:
备择方案
如果您在编译时知道类型,这是一种方法。如果您在编译时不知道类型,而只在运行时知道,那么您有不同的选择:
unions
。如果您有非常简单的类似 C 结构的类型,在 C++ 标准中称为 POD(普通旧数据),我只能推荐这个。boost::variant
来自 Boost 库或QVariant
来自 Qt 库。它们是更通用类型上的一种安全联合。它们还允许在不同类型之间进行一些转换。例如,将某些内容设置为整数值将可以读取与浮点数相同的值。boost::any
可以包装任何类型但不允许它们之间的转换。Base
。然后,您最好使用std::shared_ptrs
创建指向该基础的指针数组。所以数组类型将是std::vector<std::shared_ptr<Base>>
。在这种情况下,std::shared_ptr
比内置指针更好,因为它通过引用计数自动管理您的内存。