Этот вопрос только о том, чтобы найти какое-либо решение, которое не содержит слишком много стандартного кода - хотя это может привести к некоторым решениям, основанным на мнении - я действительно просто ищу любое решение (без слишком большого количества стандартного кода)
Следующее вызывает у меня небольшую головную боль - хотя я легко могу это исправить, я хотел бы избежать слишком большого количества стандартного кода. Следующее недопустимо c ++ , но показывает намерение.
char* newBuffer(const char* filename)
{
auto fm = try { //<--try is not legal here
boost::interprocess::file_mapping(filename, boost::interprocess::read_only);
}
catch (boost::interprocess::interprocess__exception& e) {
//report error
return nullptr;//<--this actually makes matters worse since now we cannot just simply wrap in a simpel lambda or function..
}
//rest of function ...
}
фрагмент кода Godbolt
Я мог бы просто переместить попытку в началефункция, но это будет означать просто try
всю функцию (плохая практика) вместо простого try
'ing file_mapping
конструктора. Как бы вы решили эту головоломку и избежали бы попытки блокировать всю функцию? лучше использовать меньший шаблонный код.
Любой ответ также должен касаться проблемы с возвратом nullptr в случае сбоя.