所以我在使用我的代码实际编译getline函数时遇到了一些困难,这是由于调用结构不正确。
所以我试图理解这个电话是如何运作的。
我的代码包括:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <iterator>
#include <string>
#include <vector>
#include <unistd.h>
所以我从那里开始执行以下功能:
void getData(void)
{
std:string lineIn;
std::ifstream configFile(filePath.c_str(),std::ifstream::in);
std::getline(configFile,lineIn);
}
现在我没有得到的是为什么getline通过常规std库解决,即使它是ifstream类的成员。根据我的理解,ifstream类是iostream的成员。
为什么:
std::ifstream::getline
不行吗?
谢谢!
答案 0 :(得分:0)
std::getline
中std::string
namespace std
是std::istream
中的“自由函数”而不是std::ifstream
中的“成员函数”的原因很简单:设计师C ++不希望使流组件依赖于C ++字符串。 const char*
构造函数将文件名作为std::string
而不是 private string GetPathToImage (Android.Net.Uri uri)
{
string path = null;
// The projection contains the columns we want to return in our query.
string[] projection = new[] { Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data };
using (ICursor cursor = ManagedQuery (uri, projection, null, null, null)) {
if (cursor != null) {
int columnIndex = cursor.GetColumnIndexOrThrow (Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data);
cursor.MoveToFirst ();
path = cursor.GetString (columnIndex);
}
}
return path;
}
的完全相同的原因 - 以避免不必要的模块间依赖性。
答案 1 :(得分:0)
std::getline是名称空间std
中的单独函数,而std::basic_istream::getline是同名std::basic_istream
的成员。
历史上std::basic_istream::getline
仅限于char*
缓冲区输入,与std::fgets()非常相似,而std::getline
与std::basic_string
配合使用,让您不必担心缓冲区分配等