Можно ли объявить значение виртуальной статической константы в классе C ++?

Я хотел бы иметь базовый класс, который имеет постоянное поле (например, уникальный идентификатор, связанный с классом, который не может быть изменен после времени компиляции). Пока чтоstatic const декларация была бы просто в порядке. Теперь я хотел бы унаследовать этот базовый класс и убедиться, что у потомков этого класса есть то же поле, но со своими собственными значениями. Как я могу это сделать?

Допустим, я бы хотел, чтобы базовый класс называлсяBase сID поле, которое содержитint значение 0. Затем я хотел бы иметь классыA, B а такжеCвсе они являются публичными детьмиBase и я хотел бы убедиться, что эти дети такжеID поля с соответствующими значениями 1, 2 и 3 (под «уверен», я имею в виду что-то вроде получения ошибки компилятора, если у них нет явно объявленного идентификатора).

Если бы мне удалось построить этот сценарий, я ожидал бы, чтоID полеBase* указатель, я должен получить различные значения в зависимости от того, был ли указатель создан какnew A(), new B() или жеnew C().

Мое предположение будет объявитьID какvirtual static constчто, конечно, не имеет смысла и дает ошибку компилятора.

Но что я могу сделать для достижения описанного результата? (Единственное, что я мог себе представить, это объявитьID как виртуальная функция, возвращающая целое число, а затем жестко закодировать значение в теле функции, но я ищу что-то более элегантное.)

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос