Ваш так называемый «псевдокод» на самом деле уже является правильной функцией - кроме этого вы не возвращаете значение. Еще несколько подсказок:
- Если вы храните указатель файла в переменной-члене, проверьте, был ли файл уже открыт до , и закройте его, если необходимо.
- Если вы просто загружаете некоторые данные из файла в локальные переменные, не забудьте снова
fclose
файл потом .
В противном случае вы получите утечку памяти.
Однако внутри вашей исходной функции вы создаете совершенно бесполезную копию входной строки:
bool ExampleFunction::Load(const string& fileName)
{
string f = filename; // <--- copy!!!
FILE* fp = fopen(f.c_str(), "rb");
}
Либо используйте параметр напрямую:
FILE* fp = fopen(filename.c_str(), "rb");
или, если вам нужен более короткий псевдоним, снова создайте его как ссылку:
string const& f = filename;
// alternatively:
auto& f = filename;
// ^ don't forget, otherwise copy again
Я лично рекомендую сохранить исходную функцию как перегрузку:
bool ExampleFunction::Load(char const* filename);
bool ExampleFunction::Load(std::string const& filename)
{
return Load(filename.c_str());
}
, чтобы пользователи, сохранившие имя файла в объекте std::string
, могут использовать его напрямую.