У меня есть следующий класс исключения:
#include
struct InvalidPathException : public std::exception
{
explicit InvalidPathException() {}
const char* what() const;
};
const char*
InvalidPathException::what() const {
return "Path is not valid";
}
При компиляции под GCC 4.4 с -Wall -std = c ++ 0x
ошибка: более свободный спецификатор throw для 'виртуальный константный символ * InvalidPathException :: what () const '
ошибка: переопределение' virtual const char * std :: exception :: what () const throw () '
Совершенно верно, поскольку я переопределяю метод std :: exception
what ()
, который действительно имеет спецификатор исключения throw ()
. Но, как часто сообщают , нам не следует использовать спецификаторы исключений. И насколько я понимаю, они устарели в C ++ 11 , но, очевидно, еще не в GCC с -std = c ++ 0x.
Так что меня бы интересовал лучший подход для сейчас. В коде, который я разрабатываю, я действительно беспокоюсь о производительности и поэтому беспокоюсь о часто упоминаемых накладных расходах throw ()
, но в действительности ли эти накладные расходы такие серьезные? Прав ли я, думая, что я буду страдать от этого, только когда на самом деле вызывается what ()
,
Я использую приведенный ниже код, чтобы получить текущий путь к приложению, и там я создаю папку NDSLog, чтобы все мои файлы журналов помещались туда, теперь я ...
Как проверить, существует ли уже каталог в MFC (VC ++)? Я использую приведенный ниже код, чтобы получить текущий путь к приложению, и там я создаю папку NDSLog так что все мои файлы журнала должны быть там, теперь я хочу проверить условие, если папка NDSLog уже существует, не создавайте ее. Как это сделать?
Спасибо.
char strPathName[_MAX_PATH];
::GetModuleFileName(NULL, strPathName, _MAX_PATH);
// The following code will allow you to get the path.
CString newPath(strPathName);
int fpos = newPath.ReverseFind('\\');
if (fpos != -1)
newPath = newPath.Left(fpos+1);
newPath += "NDSLog\\" ;
CreateDirectory(newPath,NULL);