Хорошо, я прочитал много ответов здесь и там об этой проблеме, но, вероятно, так как я не знаю правильного синтаксиса, я не могу понять, как это сделать.Шаблоны без параметров T в классе без шаблона
У меня есть класс без шаблонов, который должен реализовывать различные статические служебные функции, в основном для сериализации и десериализации. То, что я в настоящее время есть что-то вроде этого:
class Data_Base : public QObject
{
...
protected:
static QByteArray Serialize(int value);
static int DeserializeInt(QByteArray ser);
static QByteArray Serialize(char *value);
static char *DeserializeCharArr(QByteArray ser);
static QByteArray Serialize(QString value);
static QString DeserializeQString(QByteArray ser);
....
}
Теперь, я бы предпочел, чтобы все функции Deserialize*
в качестве шаблона, так как это будет лучше. И в качестве бонуса также есть функции Serialize
в качестве шаблонов, поэтому я заставил пользователя на самом деле явно сказать, какую перегрузку вызывать. Нечто, что может быть использован следующим образом:
QByteArray ba = Serialize<int>(5);
...
int theValue = Deserialize<int>(ba);
Теперь, я пробовал разные подходы, но так как все функции, я видел только примеры, реализующие шаблоны автоматически и не одну перегрузки в то время я не мог выяснить, как сделать эту работу.
Конечно, это C++, с дополнениями QT.
Термин, который вы, похоже, ищете, - это специализация *, а не перегрузка. Сделайте поиск по специализации * C++ template *. –
Шаблоны полезны, когда код одинаковый для каждого типа. Если ваши функции отличаются друг от друга в соответствии со структурой данных, оптимальная перегрузка умных функций - лучшее решение. –
Если речь идет о централизации вещей, так что изменение чего-то в одном меняет его вообще, как насчет того, чтобы они вызывали функцию extern? static QByteArray Serialize (int value) {return extern_serialize (value);} для всех из них, вероятно, в сочетании с тем, чтобы сделать функцию extern другом. –
Aziuth