У меня есть класс типа данных сокета, который используется для чтения и анализа значения из потока сокета (может также использоваться для файла).
Пусть мой класс будет mc_double
:Шаблон класса C++ для аналогичных классов
class mc_double {
private:
double value;
public:
bool read(socket);
write(double);
}
Фактический класс является более сложным, но это принцип. Теперь мне нужно разобрать float
из потока. Поплавок аналогичен двойному, так что уже реализован int
. Не могу ли я объединить определения этого класса со всеми double
, int
и float
как-то шаблоном?
Это то, что я имею в виду:
class mc_<typename = double or int or float> {
private:
typename value;
public:
bool read(socket);
write(typename);
}
Некоторые методы будут затем определены individualy, как mc_double::method()
другие будут одинаковыми для всех типов: mc_typename::general_method()
. Кроме того, для некоторых я должен был бы только незначительные изменения в коде:
typename mc_typename::return_value() {
return val;
}
Или конструктор:
mc_typename::mc_typename(<int, long, char, double> number) {
val = (typename)number;
}
Результат должен быть три классы - mc_int
, mc_float
и mc_double
.
Я нашел официальные документы C++, но я только выяснил последнюю часть моего вопроса - я могу создать функцию, которая принимает несколько типов данных. Остальное, похоже, не так просто.
Я настоятельно рекомендую хорошую книгу на шаблонах C++. – WhozCraig
Целая книга, вероятно, слишком много; однако простой обзор учебника, такой как [этот] (http://www.cplusplus.com/doc/tutorial/templates/), не повредит наверняка. – ulidtko
@ulidtko: Это именно то, что я читал. Это то, что я имел в виду под «официальными документами C++ + C++». –