2014-01-10 5 views
1

Вот пример, чтобы проиллюстрировать мою проблему:принизить неиспользованный виртуальный метод

class Foo1 
{ 
    virtual void FooMethod() __attribute__((deprecated)) = 0; 
}; 

class Foo2 : public Foo1 
{ 
    virtual void FooMethod() = 0; 
}; 

Моего класс Foo1 имеет чисто виртуальный метод FooMethod. Я не хочу, чтобы пользователь использовал его больше. Я хочу, чтобы они использовали этот метод в унаследованном классе Foo2. Foo1::FooMethod() так устарел и помещен в Foo2: Foo2::FooMethod(). Foo2::FooMethod() является тогда опцией Foo1::FooMethod();

Если пользователь попытается перегрузить Foo1::FooMethod(), он получит предупреждение о компиляции. Моя проблема в том, что если пользователь переопределяет Foo2::FooMethod(), он также получает предупреждение.

Как я могу реализовать «Перегрузка Foo1::FooMethod() устарела, вы должны переопределить FooMethod() через Foo2». Я не могу удалить Foo1::FooMethod() для совместимости.

Спасибо!

+3

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

+0

Перегрузки не являются. –

+0

Прежде всего, вы не перегружаете, вы переопределяете. И вы всегда относитесь к обоим версиям базового класса и, следовательно, к предупреждению. – PlasmaHH

ответ

0

Как реализовать «Перегрузка Foo1 :: FooMethod() устарела, вы должны перегрузить FooMethod() через Foo2». Я не могу удалить Foo1 :: FooMethod() для совместимости.

На данный момент, вы вызываете такой беспорядок в вашем дизайне (: P), что я хотел бы придерживаться с документации.

Сообщите пользователям, что функция устарела и не должна использоваться, а затем перейдите к ней.

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