gpt4 book ai didi

c++11 - 流的初始值设定项列表 (C++11)

转载 作者:行者123 更新时间:2023-12-02 16:03:18 28 4
gpt4 key购买 nike

我试图将可变数量的 ofstreams 传递给一个接受初始化器列表的函数,但似乎不起作用,并从初始化器列表结构中抛出所有可能的错误,以及关于我的函数如何与一个 ofstreams 数组不能与任何定义的函数匹配。

实际上是否可以在initializer_list中传递ofstreams的引用?

test.cpp

#include "extension.h"


ofstream outputFile, outputFile2;

int main(void) {

outputFile.open(("data_1.txt");
outputFile2.open("data_2.txt");
writeSomething({outputFile, outputFile2});
outputFile.close();
outputFile2.close();
}

扩展名.h

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <iostream>
#include <fstream>
#include <unistd.h>
#include <string.h>
#include <initializer_list>

using namespace std;

void writeSomething(initializer_list<ofstream&> args);

扩展.cpp

#include "extension.h"

void writeSomething(initializer_list<ofstream&> args) {
for (auto f : args ) {
f << "hello" << endl;
}
}

最佳答案

clang 3.4(主干 194324)生成一条非常清晰的错误消息:

initializer_list:54:23: error: 'iterator' declared as a pointer to a reference of type
'std::basic_ofstream<char> &'
typedef const _E* iterator;

所以不,这是不可能的。另请参阅 Error: forming pointer to reference type 'const std::pair&'… I can't understand this error .

(由于某些内部编译器错误,gcc 4.7.2 和 4.8.1 在此代码上崩溃。我已提交 bugreport 。)

您可以做的是传递指针而不是引用,如下所示:

#include <fstream>
#include <initializer_list>

using namespace std;

void writeSomething(initializer_list<ofstream*> args) {
for (auto f : args )
*f << "hello" << endl;
}

int main() {
ofstream outputFile("data_1.txt");
ofstream outputFile2("data_2.txt");
writeSomething({&outputFile, &outputFile2});
}

但是,我更愿意使用 std::vector相反。为此目的使用初始值设定项列表对我来说非常奇怪且令人困惑。

关于c++11 - 流的初始值设定项列表 (C++11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com