17

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

//ここで、「ポイント」または「そのポイントを含む線」、または上位レベルのサーフェスを返したい。// 1 つの関数ですべてを実行したい! }

4

4 に答える 4

2

関数を呼び出す前に返す型がわかっている場合は、テンプレートを使用できます。しかし、何らかの型を返すことを内部的に決定する関数を持つことはできません。

できることは、返されたデータのコンテナとなるクラスを作成し、このクラスのオブジェクトに目的のデータを入力してから、このオブジェクトを返すことです。

typedef enum { VSTRING, VINT, V_WHATEVER ... } datatype;

class MyReturnClass {

    datatype d;

    // now either
    vector<string> * vs;
    vector<int> * vi;

    // or
    void * vector;      

 }

 MyReturnClass * thisIsTheFunction () {

       MyReturnClass * return_me = new MyReturnClass();

       return_me->datatype = VSTRING;
       return_me->vs = new Vector<String>;

       return return_me;

 }
于 2013-07-15T07:56:33.317 に答える