Я хотел бы инкапсулировать ошибки Win32 (возвращенные из GetLastError ()) в некоторой форме класса исключений. Вместо того, чтобы иметь единственное исключение Win32, однако, я хотел бы смочь иметь специализированное исключение, catchable для распространенных ошибок, таких как ERROR_ACCESS_DENIED.
Например, мне объявили бы классы как это:
class WindowsException : public std::exception
{
public:
static WindowsException Create(DWORD lastError);
//blah
};
class ErrorAccessDeniedException : public WindowsException
{
public:
//blah
};
Однако я хотел бы, чтобы исключение Win32 было ответственно за выбор правильного исключения для возврата. Таким образом, метатель исключения должен быть похожим:
int DangerousMethod() {
throw WindowsAPI::WindowsException::Create(GetLastError());
}
и ловец мог бы быть похожим:
try
{
DangerousMethod();
} catch(WindowsAPI::ErrorAccessDeniedException ex)
{
//Code for handling ERROR_ACCESS_DENIED
} catch(WindowsAPI::WindowsException ex)
{
//Code for handling other kinds of error cases.
}
Моя проблема состоит в том что если WindowsException:: Создайте возвраты метода фабрики WindowsException, затем подтип (потенциально ErrorAccessDeniedException) нарезан вниз к базовому типу. Таким образом, экземпляр не может быть полиморфным. Я не хочу использовать new'd указатель, потому что это вынудило бы обработчик исключений удалить его, когда он сделан.
Кто-либо знает о конструктивном решении, которое было бы выполнимо для решения этой проблемы изящно?
Billy3
Единственный верный ответ: это зависит от .
Подготовленные высказывания - прекрасные звери, когда речь заходит о MySQL. Существует большое количество факторов, определяющих кэширование подготовленной инструкции.
Общая идея заключается в том, что если версия < 5,1,17, подготовленная инструкция никогда не кэшируется в кэше запроса, а если используется > = 5,1,17, это зависит от .
См. следующую страницу в руководстве MySQL 5,1:
http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html
-121--2404228- Чтобы использовать область запроса без Spring MVC, необходимо объявить RequestContextListener
в web.xml (см. 3,5,4,1. Начальная конфигурация веб-узла ):
<web-app>
...
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
...
</web-app>
-121--1481235- Изменить
int DangerousMethod() {
throw WindowsAPI::WindowsException::Create(GetLastError());
}
на
int DangerousMethod() {
WindowsAPI::WindowsException::Throw(GetLastError());
}
. Это означает, что вместо возврата исключения, а затем его выбрасывания (что приведет к срезу, как вы заметили), ваш помощник/заводской метод выбрасывают его напрямую.
поскольку с системного уровня драйверы должны управлять каждым битом каждого байта памяти, другой более высокий язык не может сделать это или не может сделать это, только C/Asm достигают ~
-121--1111705- Из моего опыта каждый комплекс , в котором функция
сгруппирована в скобках (я использую доктрину 1,2,1).
$q->where('name = ?', 'ABC')
->andWhere('category1 = ? OR category2 = ? OR category3 = ?', array('X', 'X', 'X'))
->andWhere('price < ?', 10)
создает следующий SQL:
WHERE name = 'ABC'
AND (category1 = 'X' OR category2 = 'X' OR category3 = 'X')
AND price < 10
-121--1223143- Еще одно исключение, обрабатывающее фоновое чтение: http://www.informit.com/articles/article.aspx?p=373339
Примечание о разделении и повторном преобразовании типов:
При повторном преобразовании исключения e, предпочитает писать просто бросать; вместо этого броска е; потому что первая форма всегда сохраняет полиморфизм перекроенный объект.