Можно ли предоставить исключения в C ++ виртуального (чистого) члена класса? - PullRequest
1 голос
/ 26 марта 2009

Если да, то как?

Я знаю, как предоставить спецификации исключений для таких членов, как

class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};

Так что method бросает только SOMEException. Если я хочу убедиться, что подклассы SOMEClass throw SOMEException для pure_method, возможно ли добавить спецификацию исключений ?. Реален ли этот подход или мне нужно больше разбираться в исключениях и абстрактных методах, чтобы выяснить, почему это можно (а не) сделать?

Ответы [ 3 ]

6 голосов
/ 26 марта 2009

Да, чистый виртуальный член может иметь спецификацию исключений.

Я рекомендую вам прочитать это: http://www.gotw.ca/publications/mill22.htm, прежде чем слишком увлекаться спецификациями исключений.

0 голосов
/ 26 марта 2009

Да, я уверен, что поместил спецификацию исключений в чисто виртуальную функцию, хотя я еще не пробовал.

Однако большинство экспертов C ++ соглашаются с тем, что, помимо спецификаций nothrow, спецификации исключений C ++ довольно бесполезны, и хотя они являются подсказкой для компилятора, они не применяются так же, как в Java.

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

0 голосов
/ 26 марта 2009
virtual void action() throw() = 0;

Это возможно. Но разумно только для throw (). Компилятор будет предупреждать вас каждый раз, когда производный класс забывает добавить спецификацию throw () в своем объявлении метода action.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...