Можно ли объявить виртуальную статическую константу в классе 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как виртуальную функцию, возвращающую целое число, а затем жестко закодировать значение в теле функции, но я ищу что-то более элегантное.)

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

16
задан Siska Ádám 6 June 2012 в 13:50
поделиться