2010-02-23 7 views
14

Есть ли способ определить класс Foo в C++ так чтоC++ предотвращения алмаза

  1. Я могу наследовать от него
  2. я не может «алмаз унаследует» от него

Т.е.

class Cat: public Foo{} // okay 
class Dog: public Foo{} // okay 
class Weird: public Cat, public Dog {} // I want this to throw a compiler error 
+0

@vava: приятное редактирование, не реализовано 1. 2. auto itemizes – anon

+0

Вы * не * хотите использовать виртуальное наследование или вы не знаете об этом? – Duck

+0

Я не знал об этом. Тем не менее, я также хотел бы получить ошибку компилятора. Базовый класс «Foo», наследуемый мной, является инвазивным указателем, пересчитанным по рефлектограмме. Я не должен иметь два экземпляра этого объекта. – anon

ответ

6

Cprogramming.com Учебник: Решение Алмазную проблемы в C++ с ...

http://www.cprogramming.com/tutorial/virtual_inheritance.html

Try This

Для этой задачи типа можно избежать или решить с помощью интерфейса.

+0

Amazing. Я не понимал, что существует «виртуальное» наследование. – anon

+0

Проблема в том, что наследование 'virtual' на руках у тех, кто получает, вы не можете ничего сделать, чтобы изменить это ... так что просто надейтесь, что те, кто пишет производные классы, прочитают ваши комментарии;) –

 Смежные вопросы

  • Нет связанных вопросов^_^