首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何创建返回类型同时为1) true/false和2)动态数据的对象

如何创建返回类型同时为1) true/false和2)动态数据的对象
EN

Stack Overflow用户
提问于 2012-04-27 09:16:11
回答 3查看 158关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

因此,您既可以测试$row变量的真假,然后访问$row变量(在本例中是一个数组),并能够对其执行操作。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-27 09:44:44

你要找的是std::pair。它包含两个值。

代码语言:javascript
代码运行次数:0
运行
复制
#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)也应该可以。

票数 1
EN

Stack Overflow用户

发布于 2012-04-27 09:55:44

使用智能指针:

代码语言:javascript
代码运行次数:0
运行
复制
while (std::shared_ptr< std::map<string, Variant> > row = fetch_row(result)) {
    std::cout << (*row)["name"] << " - " << (*row)["age"] << "\n<br />";
}

确保fetch_row()在有另一行可用时返回一个指向映射的指针,或者在行用完时返回null指针。

票数 0
EN

Stack Overflow用户

发布于 2012-04-27 10:06:08

您可以使用boost optional,它就是为此目的而设计的:重新编写chriss的代码以使用该代码将如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10343546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档