буферы протокола — уникальный постоянный идентификатор класса c ++

Цель:

У меня есть много производных классов (позже, вероятно, появятся дополнительные производные классы), которые хранятся в древовидной структуре, и я хочу сериализовать каждый из этих классов в протобуфер, а затем зашифровать двоичные данные (предоставленные SerializetoArray).
Но каждый из этих классов должен быть зашифрован с различным ключом. Очевидно, что если я хочу расшифровать его, мне нужно знать, какой ключ использовался для шифрования.

Вопрос:

Существует ли простой способ присвоить уникальное целое число каждому из этих классов, чтобы число было одинаковым для всех сред выполнения (Linux, MacOS, Windows и т. Д.) И для каждого экземпляра класса? (Это также не должно измениться, если класс получит обновление версии.)

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

Есть ли лучшее решение?

0

Решение

Вот мои два цента:

Добавьте статическую переменную-член const к каждому классу с желаемым значением.

Таким образом, каждый экземпляр одного и того же класса всегда будет иметь одинаковое значение.
что-то вроде:

class MyClassA
{
static const int myVal = 1;
public:
inline myVal() const { return myVal; }
}

class MyClassB
{
static const int myVal = 2;
public:
inline myVal() const { return myVal; }
}

Чтобы избежать дублирования значений, вы можете создать их, например, из перечисления.

1

Другие решения


По вопросам рекламы [email protected]