Pull to refresh
25
0
Александр@skor

Пользователь

Send message
Вы давайте тут своими простыми решениями не пудрите нам мозги, у нас тут C++!
А что тут про C++?
3) нельзя, потому что при выводе с помощью std::cout в консоли грязь будет в конце, и длина строки с помощью size будет неверной, stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls

а) не, мой способ нагляднее, а ваш избыточен :)

б) ничего страшного, если для символа FF получится при шифровании 0, ведь вы никак не ориентируетесь при получении длины строки на завершающий ноль, длина строки вам всегда известна. Тем более, при других способах шифрования вы никак не гарантируете, что не получится ноль, да и не нужно за этим тут следить.
А так идея мне понравилась :)
Позволю себе поревьювить ваш код:

1) в encoder SIZE — размер массива с завершающим нулем, то есть достаточно хранить SIZE байтов, а не SIZE+1
2) encoded.s[SIZE] = 0 — явный выход за границу массива
3) тут много ошибок работы с окончанием строки, например, push_back нуля в std::string делать нельзя, для него это нормальное значение, то есть нужно так:
td::transform(s, s + SIZE - 1, ...

небольшие замечания:
а) sizeCalculate — совсем лишний, если переписать encoder так:
template<typename T, std::size_t SIZE>
constexpr auto encoder(const T (&str)[SIZE])

б) почему для буфера был выбран short вместо char?
в) не силен в с++11, но, по-моему, можно указать значение по умолчанию и не описывать конструктор:
short s[SIZE + 1] = {0};

Какая получилась ужасная смесь сторого Си c Си++14.
Дочитал до слова virtual, а дальше не смог.
Тут вина не яндекса, а самих пользователей, которые вводят свои пароли где попало (фишинг), либо заражены вирусами, либо ещё что-то.
Итераторы должны оставаться валидными при удалении других элементов — std::list

Не только std::list, например, set, multiset, map, multimap обладают этим же свойством, а deque обладает этим свойством только при удалении.
А так согласен, одна схема не поможет, нужно четко понимать контейнеры.
Хочется учебник для тех, кто хорошо знаком с C++ и готов перейти на D. Чтобы без воды вот этой всей.
struct Global
{
  static int& variable()
  {
    static int v;
    return v;
  }
};


Пример объявления не константной глобальной переменной, доступной через вызов функции, который широко используется при создании синглтонов.
А что такого нужно объявлять в cpp-файле, чего нельзя было бы объявить в заголовочном?
_INITIALIZE_EASYLOGGINGPP. Он требуется для инициализации некоторых статических переменных и установки обработчика для крэшей.

Вот это смущает, почему нельзя всё это инициализировать просто при первом обращении к библиотеке?
Был бы я сотовым оператором, то купил бы его уже ради того, чтобы уничтожить и вернуть себе доходы от смс.
Спонсор сделки агентство национальной безопасности США?
Удивил полноценный терминал в web-интерфейсе, в котором можно запустить консольный emacs.
Ох, я тоже что-то подобное тут писал =)
habrahabr.ru/post/124963/
Кстати, если вы создали для этого специальный макрос, то это подразумевает его повторное использование. Но если использовать ваш макрос второй раз в том же коде, это приведёт к конфликту объявляемых имён. Лучше не выносить такие вещи в макрос, а просто писать как есть.
Всё, что написал автор поста, используя связку boost::shared_ptr + boost::factory:
typedef boost::function<boost::shared_ptr<Test>(std::string)> factory_t;

std::map<std::string, factory_t> factory = boost::assign::map_list_of
    ("test", factory_t(boost::factory<boost::shared_ptr<Test> >()))
    ("testchild", factory_t(boost::factory<boost::shared_ptr<TestChild> >()))
    ;

Использование:
boost::shared_ptr<Test> a = factory["test"]("A");
a->func();
boost::shared_ptr<Test> b = factory["testchild"]("B");
b->func();

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity