正如方法mysql_fetch_array()的返回类型既是布尔型数组,也是关联数组,您可以在其中评估sql查询是否成功,如果成功,则将返回数据存储到数组中,然后访问相同的对象$row并显示如下所示的行:
while($row = mysql_fetch_array($result)){
echo $row['name']. " - ". $row['age'];
echo "<br />";
}
因此,您既可以测试$row变量的真假,然后访问$row变量(在本例中是一个数组),并能够对其执行操作。
我想在c++中做同样的事情
我正在尝试创建一个方法,该方法将根据方法中的几个条件返回枚举值,如果该方法为true,则执行其他操作。问题是我不知道如何创建这种数据类型。我如何才能做到这一点?
发布于 2012-04-27 01:44:44
你要找的是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-27 01:55:44
使用智能指针:
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-27 02:06:08
您可以使用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
}
与使用std::pair<bool,X>
相比,这样做的一个好处是boost::optional<X>
可以在没有默认构造函数的情况下处理X
类型。
https://stackoverflow.com/questions/10343546
复制