是否有可能(尽管可能不是很好的做法)立即从函数中设置结构的值? 例如:
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并从中提取字符串值?
答案 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。问题不是天气它是有效的,但如果它的语义清晰和可维护。有些人认为这样的结构优雅而简洁。其他人则认为这是令人憎恶的。把我算在后一组。自己决定。