Stroika - это современная, портативная, C ++ -каркас. Это облегчает написание приложений C ++, предоставляя безопасные, гибкие, строительные блоки, а также обертывания в других полезных библиотеках, которые помогают им работать вместе более, кажется,.
String a = u8" abc " ;
String b = u32 " abc " ;
CallFunction (a+b);
// trim whitespace, and convert to u16string for some legacy API
std::u16string uuu = (a+b).Trim ().As<u16string>();
// tokenize
String t{ " ABC DEF G " };
Assert (t.Tokenize ()[1] == "DEF"); // most Stroika types automatically support formattable<>
DbgTrace ( " v = {} " _f, v); // to a tracelog file, or debugger
cerr << " v = {} " _f (v) << endl; // OR iostreams (unicode mapped automatically) // nb: String is an Iterable<Character>,
// despite internally representing the characters very differently
bool IsAllWhitespace (String s) const
{
return not s. Find ([] (Character c) -> bool { return not c. IsWhitespace (); });
}
Iterable< int > c { 1 , 2 , 2 , 5 , 9 , 4 , 5 , 6 };
EXPECT_TRUE (c.Distinct ().SetEquals ({ 1 , 2 , 4 , 5 , 6 , 9 }));
Iterable< int > c { 3 , 4 , 7 };
// Map iterates over 'c' and produces the template argument container
// automatically by appending the result of each lambda application
EXPECT_EQ ((c.Map<vector<String>> ([] ( int i) { return " {} " _f (i); }), vector<String>{ " 3 " , " 4 " , " 7 " }));Корова (копия на записи часто значительно повышает производительность для большинства распространенных случаев)
API, определяемые шаблоном доступа, например, Stack = push/pop, последовательность = Array-Like Access, map = {for: to} и т. Д.
Репрезентативная прозрачность
Stroika предоставляет богатый набор контейнеров -архипов и импляций структуры данных.
extern void f (Set< int >);
// use the default Set<> representation - the best for type 'int'
Set< int > s{ 1 , 2 , 3 };
f (s); // data not actually copied - Stroika containers use 'copy-on-write (COW)'
s = Concrete::SortedSet_SkipList< int >{s}; // Use a skiplist to represent the set
f (s); // call f the same way regardless of data structure used for implementation
// set equality not order dependent (regardless of data structure)
Assert (s == { 2 , 3 , 1 }); См. Пример контейнеров для получения более подробной информации
MyClass someObject = ...;
VariantValue v = mapper.FromObject (someObject); // Map object to a VariantValue
// Serialize using any serialization writer defined in
// Stroika::Foundation::DataExchange::Variant (we selected JSON)
Streams::MemoryStream:: Ptr <byte> tmpStream = Streams::MemoryStream::New<byte> ();
Variant::JSON::Writer{}.Write (v, tmpStream);
// You can persist these to file if you wish
{
using namespace IO ::FileSystem ;
FileOutputStream:: Ptr tmpFileStream =
FileOutputStream::New ( WellKnownLocations::GetTemporary () / " t.txt " );
Variant::JSON::Writer{}. Write (v, tmpFileStream);
}См. Пример сериализации для получения более подробной информации
Route{ " variables/(.+) " _RegEx,
// explicit message handler
[ this ] (Message& m, const String& varName) {
WriteResponse (m. rwResponse (), kVariables_ , kMapper . FromObject ( fWSImpl_ -> Variables_GET (varName)));
}},
Route{HTTP::MethodsRegEx:: kPost , " plus " _RegEx,
// automatically map high level functions via ObjectVariantMapper
ObjectRequestHandler::Factory{ kBinaryOpObjRequestOptions_ ,
[ this ] (Number arg1, Number arg2) { return fWSImpl_ -> plus (arg1, arg2); }}},Смотрите образец веб -сервисов для получения более подробной информации.
Сделает сжатие, шифрование, ввождение, сеть, обработка данных, все это сочетается друг с другом, кажется,
// @todo INCOMPLETE - BAD EXAMPLE---
const OpenSSL::DerivedKey kDerivedKey =
OpenSSL::EVP_BytesToKey{ OpenSSL::CipherAlgorithms::kAES_256_CBC (), OpenSSL::DigestAlgorithms:: kMD5 , " password " };
const Memory::BLOB srcText =
Memory::BLOB::FromHex ( " 2d ... " ); // ...
// EncodeAES takes a stream, and produces a stream
// which can be chained with the gzip Transformer, which takes a stream, and produces a
Compression::GZip::Compress::New ().Transform (EncodeAES ( kDerivedKey , srcText.As<Streams::InputStream:: Ptr <byte>> (), AESOptions::e256_CBC))Стилистически, Stroika отличается от стандартной библиотеки C ++, Boost и многих других библиотек C ++, тем, что она (относительно) охватывает объектно-ориентированные абстракции по общей общей шаблонам (см. Stroika-repach-to-Performance.md). Абстракция иерархий типа лучше подходит для того, как люди разумны, а шаблоны и концепции - хотя и мощные - могут быть неясными и неясными намерениями программиста. Кроме того, Stroika подчеркивает отделение интерфейса от реализации: тщательно документирование интерфейса в заголовках и разделение реализации на другие файлы.
Stroika состоит из 2 слоев: фундамент, который предоставляет классы блока здания, применимые к большинству приложений, и серию доменных структур, которые обеспечивают богатую коллекцию кода в разных областях.

Рамки зависят от фундамента; Фонд -модули часто зависят друг от друга; Но код слоя фундамента не содержит зависимости за пределами фундамента (за исключением стандартной библиотеки C ++, а также различные библиотеки третьей частично -компоненты, при необходимости, включенные или упоминаемые, как OpenSSL).
Не хочу читать - просто хочу кодировать. Шаг за шагом
Самая большая сила Строики - это также самая большая слабость:
Stroika v3 в активной разработке ( не стабильной ) и требует C ++ 20 или более поздней.
Stroika v2.1 является стабильной (в обслуживании) и требует C ++ 17 или более поздней версии. Версия 2.1 также условно поддерживает многие функции C ++ 20 (например, трехсторонний соблюдение и т. Д., Если таковые имеются).
Stroika v2.0 очень стабилен и требует C ++ 14 или более поздней версии. Stroika v2.0 используется для питания широкого спектра открытых и коммерческих приложений.
Linux, macOS, Windows
Stroika v3
TBD, но пока выглядит как VS2K22 (17,9) или позже в Windows, Xcode 15 (.2) или более позднее на macOS, и G ++ 11 или более поздней версии, и Clang ++ 15 или более поздней версии.
Stroika v2.1
Протестировано на x86, ARM (+M1), GCC 8 Thru GCC 12, Clang 6 Thru Clang 14, Visual Studio.net 2017, Visual Studio.net 2019 и Visual Studio.net 2022, Xcode 13, 14, 15.
Stroika v2.0
Протестировано на x86, ARM, GCC 5 через GCC 8, Clang 3 Thru Clang 6, Xcode 8 Tru 9.
Действия GitHub
| Ветви | Статус | |
|---|---|---|
| V3-релиз | ![]() | .github/Workflows/build-n-test.yml |
| v3-dev | ![]() | .github/Workflows/build-n-test.yml |
Для получения более подробной информации об индивидуальных изменениях выпуска см.
Релиз notes.md
«Начало работы», инструкции по строительству, дизайн и другую документацию:
Документация/
Просмотр образцов также является хорошим способом начать:
Образцы/
Пожалуйста, сообщите об ошибках/проблемах по адресу:
http://stroika-bugs.sophists.com