Можно ли предоставить исключения в C++ виртуального (чистого) члена класса?

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

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

class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};

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

3 ответа

Решение

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

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

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

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

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

virtual void action() throw() = 0;

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

Другие вопросы по тегам