返回结构的特定值

时间:2014-01-17 13:35:27

标签: c++

是否有可能(尽管可能不是很好的做法)立即从函数中设置结构的值? 例如:

typedef struct 
{
    bool success;
    std::string returnString;
} functionReturn;

functionReturn go(std::string word[])
{
    functionReturn returnStruct;
    ...

    return returnStruct;
}


int main()
{
    std::string word[4];
    ... //assign values to word
    std::string returnedString = go(word).returnString //will this work?
}

这是可能的还是我实际上必须将它分配给另一个functionReturn并从中提取字符串值?

2 个答案:

答案 0 :(得分:5)

是的,这是完全可能的;它与调用返回对象的成员函数没有什么不同,这很正常:

std::ostringstream s;
s << "file" << i;
std::ifstream f(s.str().c_str());  //notice calls here

答案 1 :(得分:1)

请不要在C ++中使用typedef struct {...} name;成语。这是C的延续,在C ++中没有任何价值。只需使用标准技术:struct name {...};

在做你正在做的事情时,在技术上没有任何错误。请注意,不要返回对本地或类似内容的引用。你不在这里。

实际上,您可以使用一个方法对参数执行某些操作并返回对该对象的引用,然后将方法调用链接在一起,如下所示:

struct functionReturn
{
  functionReturn& doSomething() { return * this; }
  functionReturn& doSomethingElse() { return * this; }
};

int main()
{
  functionReturn fr;
  fr.doSomething().doSomethingElse();
}

这也是有效的。它被称为method chaining。问题不是天气它是有效的,但如果它的语义清晰和可维护。有些人认为这样的结构优雅而简洁。其他人则认为这是令人憎恶的。把我算在后一组。自己决定。