1

正如 mysql_fetch_array() 方法的返回类型既是布尔值,也是数值数组和关联数组,您可以在其中评估 sql 查询是否成功,如果成功,将返回数据存储到数组中,然后访问同一个对象 $row并显示如下所示的行:

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

所以你可以测试 $row 变量的真假,然后在这种情况下访问 $row 变量是一个数组,并能够用它做事。

我想在 C++ 中做同样的事情

我试图创建一个方法,该方法将根据方法中的一些条件返回枚举值,如果该方法为真,则执行其他操作。问题是我不知道如何创建这种数据类型。我怎样才能做到这一点?

4

3 回答 3

1

您正在寻找的是std::pair. 它有两个值。

#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()返回指向地图的指针,或者在行数用完时返回空指针。

于 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
}

与 using 相比,这样做的一个好处std::pair<bool,X>是它适用于没有默认构造函数boost::optional<X>的类型。X

于 2012-04-27T02:06:07.833 回答