Это не вопрос дизайна, действительно, хотя это может показаться. (Ну, ладно, это вопрос дизайна). Мне интересно, почему классы C++ std::fstream
не принимают std::string
в свой конструктор или открывают методы. Все любят примеры кода:Почему классы std :: fstream не принимают std :: string?
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string filename = "testfile";
std::ifstream fin;
fin.open(filename.c_str()); // Works just fine.
fin.close();
//fin.open(filename); // Error: no such method.
//fin.close();
}
Это позволяет мне работать с файлами постоянно. Разумеется, библиотека C++ будет использовать std::string
везде, где это возможно?
Образец не должен вызывать каких-либо двусмысленностей с правилами разрешения перегрузки. `f (char *, std :: string)` является [точное совпадение] (http://www.lcdf.org/c++/clause13.html#s13.3.3.1.1), в то время как другие потребуют преобразования, следовательно, первая была бы лучшей жизнеспособной функцией.Если вы удалили первый «f», тогда как «(char * &, std :: string &) -> (char *, std :: string) -> (char *, char *)" является [лучшей последовательностью преобразования ] (http://www.lcdf.org/c++/clause13.html#s13.3.3), чем "(char * &, std :: string &) -> (char *, std :: string) -> (std: : string, char *) ", вторая` f` будет лучшей жизнеспособной функцией. Я что-то упускаю? – outis 2010-11-14 23:49:43