История изменений
Исправление den73, (текущая версия) :
Если я правильно помню, то в С++ за это имеется очень жестокая расплата в виде ограничений на конструктор, из-за которых иногда всю голову сломаешь, чтобы придумать, как создать объект.
Хм... о чём речь? На более-менее конкретном примере можно?
Это было давно. Я точно помню, что проблема была в том, что аргументы конструкторов полей передаются в ограниченной конструкции, где нет контекста и нельзя даже завести переменную. Типа такой:
class TRICKY {
some_class a;
other_class& b;
public:
TRICKY(some_class i, other_class &j) : a(i), b(j)
Опять же, в расте основное удобство как раз в том, что ты не можешь «не проверить указатель» (вернее Option).
С этим я не спорю.
Я ищу ответ на вопрос, почему написанный на Расте код обработки ошибок столь страшен.
И вижу причину в enum-ах. Если отделить возврат и ошибку (передавать её хоть через указатель, как бывает в С), то будет проще, мне кажется. Но это нужно пробовать и проверять.
К сожалению, придётся эту тему свернуть. Я уже забыл статью про обработку ошибок в Расте и теперь её надо читать снова. Наверное, это теперь будет не скоро.
Исправление den73, :
Если я правильно помню, то в С++ за это имеется очень жестокая расплата в виде ограничений на конструктор, из-за которых иногда всю голову сломаешь, чтобы придумать, как создать объект.
Хм... о чём речь? На более-менее конкретном примере можно?
Это было давно. Я точно помню, что проблема была в том, что аргументы конструкторов полей передаются в ограниченной конструкции, где нет контекста и нельзя даже завести переменную. Типа такой:
class TRICKY {
some_class a;
other_class& b;
public:
TRICKY(some_class i, other_class &j) : a(i), b(j)
Опять же, в расте основное удобство как раз в том, что ты не можешь «не проверить указатель» (вернее Option).
С этим я не спорю.
Я ищу ответ на вопрос, почему написанный на Расте код обработки ошибок столь страшен.
И вижу причину в enum-ах. Если отделить возврат и ошибку (передавать её хоть через указатель, как бывает в С), то будет проще, мне кажется. Но это нужно пробовать и проверять.
К сожалению, придётся эту тему свернуть. Я уже забыл статью про обработку ошибок в Расте и теперь её надо читать снова. Наверное, это теперь будет не скоро.
Исправление den73, :
Если я правильно помню, то в С++ за это имеется очень жестокая расплата в виде ограничений на конструктор, из-за которых иногда всю голову сломаешь, чтобы придумать, как создать объект.
Хм... о чём речь? На более-менее конкретном примере можно?
Это было давно. Я точно помню, что проблема была в том, что аргументы конструкторов полей передаются в ограниченной конструкции, где нет контекста и нельзя даже завести переменную. Типа такой:
class TRICKY {
some_class a;
some_class& b;
public:
TRICKY(int i, int &j) : a(i), b(j)
Опять же, в расте основное удобство как раз в том, что ты не можешь «не проверить указатель» (вернее Option).
С этим я не спорю.
Я ищу ответ на вопрос, почему написанный на Расте код обработки ошибок столь страшен.
И вижу причину в enum-ах. Если отделить возврат и ошибку (передавать её хоть через указатель, как бывает в С), то будет проще, мне кажется. Но это нужно пробовать и проверять.
К сожалению, придётся эту тему свернуть. Я уже забыл статью про обработку ошибок в Расте и теперь её надо читать снова. Наверное, это теперь будет не скоро.
Исходная версия den73, :
Если я правильно помню, то в С++ за это имеется очень жестокая расплата в виде ограничений на конструктор, из-за которых иногда всю голову сломаешь, чтобы придумать, как создать объект.
Хм... о чём речь? На более-менее конкретном примере можно?
Это было давно. Я точно помню, что проблема была в том, что аргументы конструкторов полей передаются в ограниченной конструкции, где нет контекста и нельзя даже завести переменную. Типа такой:
class TRICKY {
const int a;
int& b;
public:
TRICKY(int i, int &j) : a(i), b(j)
Опять же, в расте основное удобство как раз в том, что ты не можешь «не проверить указатель» (вернее Option).
С этим я не спорю.
Я ищу ответ на вопрос, почему написанный на Расте код обработки ошибок столь страшен.
И вижу причину в enum-ах. Если отделить возврат и ошибку (передавать её хоть через указатель, как бывает в С), то будет проще, мне кажется. Но это нужно пробовать и проверять.
К сожалению, придётся эту тему свернуть. Я уже забыл статью про обработку ошибок в Расте и теперь её надо читать снова. Наверное, это теперь будет не скоро.