C++Предотвращение строительства, бросая исключение, прежде чем конструктор тело
Я хочу, чтобы класс к throw
исключению перед открытием тела своего конструктора фигурной скобкой {
, используя свою собственную функцию чтобы предотвратить строительство. Я определил функцию-член, целью которой является только безоговорочное исключение с произвольным выбранным типом возврата не void
и фиктивным элементом данных, тип которого соответствует этому типу возврата, так что я могу запустить throw
, построив этот элемент данных с помощью вызов указанной функции-члена в списке инициализатора конструктора. Это работает, но не изящно, потому что в классе, отличном от игрушек, фиктивная переменная не будет служить никаким другим целям, кроме как иметь оправдание для функции-члена для запуска, а возвращаемый тип функции-члена функции не имеет никакой другой цели, кроме как имеют оправдание для того, чтобы он мог быть вызван конструктором фиктивного элемента данных того же типа.
Эта игрушка компилирует, но не элегантен:
class Toy
{
public:
Toy() : dummy(preventer()) {}
private:
int dummy;
int preventer() {throw -1; return 0;}
};
#include <iostream>
int main()
{
try
{
Toy t;
}
catch (const int& e)
{
std::cout << "caught the exception\n";
}
return 0;
}
Консоли вывод:
caught the exception
без фиктивного переменного, есть способ бросить исключение перед открывающей фигурной скобкой {
корпуса конструктора?
посмотреть эту тему: http://stackoverflow.com/questions/2672398/throw-exception-from-constructor-initializer? – taocp
@ Ken White, я не пытаюсь создать синглтон в частности. Я просто хочу знать, как предотвратить строительство до тела конструктора, в общем. – CodeBricks
Получил это. :-) Я видел ссылку, которую @SongWang опубликовал и удалил мой комментарий; должно быть, произошло так же, как вы ответили. –