класс Derived публично является производным от класса Base, не делает ли он Get () функцией-членом Derived?
Да в том смысле, что поиск Derived::Get()
будетработать, но она вызывает ту же функцию, как если бы вы написали Base<Derived>::Get()
.
Если [1] имеет значение true, и Get () становится функцией-членом Derived, то почему он не можетвызовите приватный конструктор Derived.
Поскольку разные классы не могут получить доступ к закрытым членам по имени.Это то, что является частным.По той же причине, по которой Derived
не может получить доступ к закрытым членам Base
.
Предположим, у нас есть несколько классов, которые должны быть реализованы как Singleton, есть ли способ сделать это с помощью шаблонов с чем-то похожим наприведенный выше пример?(дополнительный вопрос)
Разве это не то, что делает ваш пример?
Мы можем заставить приведенный выше код работать, сделав основанием друга производной строки для кода.
Правильно.
Мы можем сделать Get () как "не статическая виртуальная функция" и переопределить в производных классах.
Я так не думаю.Вы не можете вызвать эту виртуальную функцию без объекта.Вам потребуется создать экземпляр Derived
перед вызовом Get
, но Get
должен создать наш объект.
Хотя, пожалуйста, дайте мне знать, если это (эти)Это единственное возможное решение для создания такого дизайна. (1039 *
) Я бы, наверное, выбрал фриендинг.Просто, лаконично и делай что хочешь.Существуют и другие решения, такие как наличие защищенного типа в базе и определение открытого конструктора, который получает этот защищенный тип, но это довольно сложно, и я не буду рекомендовать.