1

メソッド mysql_fetch_array() の戻り値の型が数値配列と関連配列の両方であるのと同じように、SQL クエリが成功したかどうかを評価し、成功した場合は戻りデータを配列に格納してから、同じオブジェクト $row にアクセスできます。次のように行を表示します。

while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

そのため、$row 変数の true または false をテストしてから、この場合は配列である $row 変数にアクセスして、それを使用して何かを行うことができます。

C ++で同じことをしたい

メソッド内のいくつかの条件に基づいて列挙値を返すメソッドを作成しようとしており、メソッドが true の場合は別のことを行います。問題は、このデータ型を作成する方法がわからないことです。どうすればこれを達成できますか?

4

3 に答える 3

1

あなたが探しているのはstd::pair. 2 つの値を保持します。

#include <iostream>
#include <utility>

std::pair<bool, int> foo (int i)
{
    std::pair<bool, int> ret;

    if (i != 5)
    {
        ret.first = true;
        ret.second = i;
    }

    else
    {
        ret.first = false;
        ret.second = 0;
    }

    return ret;
}

int main()
{
    if (foo (6).first)
        std::cout << foo (6).second << '\n'; //prints

    if (foo (5).first)
        std::cout << foo (5).second; //doesn't print
}

編集:
ああ、これが を扱うのは初めてだったので、std::pair何かを見落としていました。それを使用std::make_pair (true, i)して返すと、すっきりした機能を実現できます。戻るstd::pair<bool, int> (true, i)ことも同様に機能するはずです。

于 2012-04-27T01:44:44.350 に答える
0

スマートポインタを使用します。

while (std::shared_ptr< std::map<string, Variant> > row = fetch_row(result)) {
    std::cout << (*row)["name"] << " - " << (*row)["age"] << "\n<br />";
}

fetch_row()別の行が使用可能な場合はマップへのポインターを返し、行がなくなった場合はnullポインターを返すようにしてください。

于 2012-04-27T01:55:43.540 に答える
0

まさにこの目的のために設計されたboost optionalを使用できます: これを使用するために chriss のコードを作り直すと、次のようになります。

boost::optional<int> foo (int i)
{
    if (i != 5)
    {
        return boost::optional<int>(i);
    }

    else
    {
        return boost::optional<int>();
    }
}

int main()
{
    boost::optional<int> f6 = foo(6);
    if ( f6 )
        std::cout << *f6 << '\n'; //prints

    boost::optional<int> f5 = foo(5);
    if ( f5 )
        std::cout << *f5 << '\n'; //doesn't print
}

これを使用することの利点の 1 つstd::pair<bool,X>は、デフォルトのコンストラクターのないboost::optional<X>型で機能することです。X

于 2012-04-27T02:06:07.833 に答える