Как использовать оператор C ++ Expected? - PullRequest
0 голосов
/ 04 февраля 2019

Я начинаю проект с использованием C ++, который я раньше не использовал, за исключением нескольких школьных проектов - нигде не выходя за рамки того, чем я сейчас занимаюсь.

Моя цель - попробоватья стараюсь следовать C ++ Core Guidelines , пока я работаю, чтобы избежать ошибок, повысить производительность и, самое главное: улучшить удобство сопровождения моего кода.

Я буквально столкнулся с сотни проблем, начиная от того, что мои версии g ++ / Clang ++ не были правильными, до того, что стандартные библиотеки не были найдены для g ++, использующего неправильную версию C ++ для компиляции, до самых базовых функций, которые не работают должным образом - , и я даже не имеюЯ начал изучать автоинструменты , поэтому я ожидаю, что последует еще много головной боли.

Однако этот вопрос относится только к одной части Основных рекомендаций C ++. Интерфейсы 6: Предпочитать Expect () для выражения предварительных условий

Я попытался написать следующий простой код:

#include <iostream>

using namespace std;

int square(int x) {
    Expects(x > 0);
    return x * x;
}

int main() {
    cout << square(3) << endl;
    return 0;
}

Это вызвало ошибку в g ++:

$> g++ -std=c++17 main.cpp
main.cpp: In function ‘int square(int)’:
main.cpp:7:2: error: ‘Expects’ was not declared in this scope
  Expects(x > 0);
  ^~~~~~~
-> [1]

Я тоже пытался использовать Clang, но у него совершенно другая (и не связанная) проблема:

$> clang++ -x c++ main.cpp
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.
-> [1]

Я еще не понял, как это исправить, поэтому я 'я не беспокоюсь об этом.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Помимо GSL, Excepts существует также в C++20, а не в C++17 с немного другим синтаксисом

0 голосов
/ 04 февраля 2019

Expects является частью библиотеки GSL.Вы должны использовать некоторую реализацию библиотеки GSL, которую вы можете найти на Github:

Это теУ меня не все в порядке.

Если вам нужна только часть контракта (Expects, Ensures и т. Д.), Просто включите заголовок gsl/gsl_assert.Например: gsl_assert от Microsoft .Реализация Мартина не делает разделения, поэтому вы должны включить весь заголовок GSL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...