определение функции чтения / записи - PullRequest
1 голос
/ 18 апреля 2011

как бы вы написали эти функции:

bool writesomething(const Something& something);
//or
bool writesomething(int somethingid, const Something& something);

bool readsomething(const Something& something);
//or
bool readsomething(int somethingid, Something& something);

обратите внимание, что Что-то имеет открытое поле с именем id

1 Ответ

1 голос
/ 18 апреля 2011

Это зависит от структуры Нечто. Но как общий принцип проектирования, ваши классы должны быть невежественными, когда это возможно.

При этом, если вы хотите иметь возможность (де) сериализовать ваши объекты, я бы смоделировал ваши методы ввода / вывода на встроенных интерфейсах библиотеки потоков ввода / вывода. Тогда ваши объекты будут поддерживать ввод / вывод в / из консоли, файлы, все остальное, что наследуется от istream или ostream.

Помимо поддержания согласованного интерфейса со стандартной библиотекой (и тоннами стороннего кода), адаптация интерфейса потоков ввода-вывода также облегчает написание вашего метода. Если что-то имеет int 'id' и строковый член 'name':

ostream& operator << (ostream& os, const Something& thing)
{
    os << thing.id;
    os << thing.name;
    return os;
}

Если члены Something более сложны, вы реализуете операторы << и >> для этих типов и так далее по цепочке.

...