通过SWIG在Python中使用std :: ifstream,std :: ofstream的技术?
问题内容:
有没有办法std::[io]fstream
通过swig在python中使用的?
我有一个C类,其功能如下:
void readFrom(std::istream& istr);
void writeTo(std::ostream& ostr);
我想在python中构造一个std::ofstream
实例,并将其作为参数传递给writeTo
(并做同样的事情来读取)。
我试着做一个像
std::ostream& make_ostream(const std::string& file_name){
return std::ofstream( file_name.c_str() );
}
在swig.i
文件中,以便此功能将成为接口的一部分。但是,这不起作用。因为流类是不可复制的,所以存在一个问题。
尽管std_iostream.i
似乎可以帮助使用通用[io]stream
类,但对创建所需的文件流没有帮助。
问题答案:
我不知道,但是假设您需要创建一个可复制的对象,则可能会使用类似
std::shared_ptr<std::ostream> make_ostream(std::string const& filename) {
return std::make_shared<std::ofstream>(filename);
}
…,然后使用转发功能调用您实际要调用的功能:
void writeTo(std::shared_ptr<std::ostream> stream) {
if (stream) {
writeTo(*stream);
}
}
(如果名称重载会导致问题,那么您当然可以不同地调用转发功能)。