Я пытаюсь создать класс, который будет анализировать файл в C ++.
Однако файл на самом деле в 2 файлах, заголовок и необработанные данные.
Заголовок содержит тип данных необработанных данных (это может быть int, double, float и т. Д.).
Я хочу создать переменную в моем классе, которая будет хранить необработанные данные.
Обработка будет одинаковой, независимо от типа данных.
Должен ли я использовать шаблон для этого? Разве не излишне использовать шаблонный класс только для одной переменной?
Спасибо.
Шаблоны, безусловно, могут помочь вам здесь. Они предлагают способ уменьшить повторение той обработки, которая, как вы говорите, одинакова для всех типов.
Нужно ли вам их использовать — это, конечно, более сложный вопрос, как и то, является ли это излишним — оба являются вопросами мнений, но общее использование предполагает, что использование только одной переменной не будет фактором, который решит это.
Если содержимое файлов, содержащих разные типы, необходимо обработать в одном и том же контейнере или если файл может содержать более одного типа, то, возможно, более подходящий вариант будет более подходящим.
Поскольку вы читаете типы из файла, эти типы известны во время выполнения, но поскольку список параметров известен во время компиляции, вы можете проверить тип в файле и передать тип.
if(typeFromFile == headerValueForint)
{
processFile<int>();
}
else if (typeFromFile == headerValueFordouble)
{
processFile<double>();
}
Однако, поскольку все перечисленные вами типы являются числовыми (и мне интересно, как обработка могла бы быть действительно одинаковой, если есть какие-либо другие нечисловые типы), вы можете решить считать все значения как двойные — с подходящей проверкой диапазона. Это может занять больше памяти, но влияние этого зависит от того, что на самом деле включает обработка.
Как насчет использования перегрузка функции? Вы сказали, что обработка такая же, так что … я думаю, вы могли бы. Я использую их иногда, чтобы делать такие вещи.
Пример:
header.h
class MyClass {
public:
void function(int x);
void function(double x);
void function(string x);
void function(char x);
};
Компилятор будет знать, какую функцию использовать, в зависимости от значения, которое вы отправляете (передаете) ей.