関数において返り値を2つ以上指定する方法


Cocos2d-xでプログラミングをしていると、関数の返り値は1つしか指定できないことに気付きました。返り値が2つ以上あった場合はどのように指定すれば良いのでしょうか？  
以下のchangeTwoSpritePositionX()は、2つのSpriteのX座標を指定された値に変更し、2つのSpriteを返しくれる関数です。正常に動作させるには、どのような修正を加えればよいでしょうか？詳しい方、ご教示ください。

[code]

    void changeTwoSpritePositonX(Sprite *spriteA,Sprite *spriteB,float positionX){
      spriteA->setPosition(Point(positionX,spriteA->getPositionY()));
      spriteB->setPosition(Point(positionX,spriteB->getPositionY()));
      // return ここでspriteAとspriteBを返したい
    }
    
[/code]




まず、複数の戻り値を指定することは現在のC++ではできません。提示されたコードの場合は、ポインターが引数となっているためそのままでも利用できます。

[code]

    #include<iostream>
    using namespace std;
    
    void f(int * i)
    {
       *i = 6;
    }
    int main()
    {
       int * int_ptr = new int(5);
       cout << *int_ptr << endl;
       f(int_ptr);
       cout << *int_ptr << endl;
    }
    
[/code]

このように上記のコードを実行すればほかの方の回答が理解できると思います。

とりあえず以下が元の質問への回答です。  
structなどを利用することにより、戻り値に複数に要素を持たせることができます。

1.container(例えばvectorなど)に格納して返す

[code]

    std::vector<Sprite*> return_val;
    return_val.push_back(spriteA);
    return_val.push_back(spriteB);
    return(return_val);
    
[/code]

ただし、containerにポインターを格納するのは一般的に良い考えではありません。なお要素はoperator[]でアクセスできます。また、iteratorなどでもアクセスできます。

2.std::pairもしくはstd::tuppleを返す

[code]

    return(std::make_pair(spriteA,spriteB));
    
[/code]

もしくは

[code]

    return(std::make_tuple(spriteA,spriteB));
    
[/code]

また、pairの場合は.first、.second、tupleの場合はgetで要素にアクセスできます。

3.struct、classを使う

[code]

    struct sprite_ptr_container
    {
       sprite * _ptr1;
       sprite * _ptr2;
    }
    
[/code]




まず、複数の戻り値を指定することは現在のC++ではできません。提示されたコードの場合は、ポインターが引数となっているためそのままでも利用できます。

[code]

    #include<iostream>
    using namespace std;
    
    void f(int * i)
    {
       *i = 6;
    }
    int main()
    {
       int * int_ptr = new int(5);
       cout << *int_ptr << endl;
       f(int_ptr);
       cout << *int_ptr << endl;
    }
    
[/code]

このように上記のコードを実行すればほかの方の回答が理解できると思います。

とりあえず以下が元の質問への回答です。  
structなどを利用することにより、戻り値に複数に要素を持たせることができます。

1.container(例えばvectorなど)に格納して返す

[code]

    std::vector<Sprite*> return_val;
    return_val.push_back(spriteA);
    return_val.push_back(spriteB);
    return(return_val);
    
[/code]

ただし、containerにポインターを格納するのは一般的に良い考えではありません。なお要素はoperator[]でアクセスできます。また、iteratorなどでもアクセスできます。

2.std::pairもしくはstd::tuppleを返す

[code]

    return(std::make_pair(spriteA,spriteB));
    
[/code]

もしくは

[code]

    return(std::make_tuple(spriteA,spriteB));
    
[/code]

また、pairの場合は.first、.second、tupleの場合はgetで要素にアクセスできます。

3.struct、classを使う

[code]

    struct sprite_ptr_container
    {
       sprite * _ptr1;
       sprite * _ptr2;
    }
    
[/code]

