...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
A QR code is a machine-readable two-dimensional barcode. They might contain data for a identifier or a URL to a website.
This example shows how to construct and modify URLs to consume a third party API to generate QR Codes.
/* This example shows how to construct and modify URLs to consume a third party API to generate QR Codes. https://developers.google.com/chart/infographics/docs/qr_codes */ #include <boost/url/url.hpp> #include <boost/core/detail/string_view.hpp> #include <boost/url/parse.hpp> #include <iostream> namespace urls = boost::urls; namespace core = boost::core; int main(int argc, char** argv) { if (argc < 2) { std::cout << argv[0] << "\n"; std::cout << "Usage: qrcode <data> <width> <height> <output encoding> <error correction> <border>\n" "options:\n" " <data>: The data to encode (required)\n" " <width>: Image width (default: 100)\n" " <height>: Image height (default: width)\n" " <output encoding>: UTF-8, Shift_JIS, ISO-8859-1 (default: utf8)\n" " <error correction>: percentage of error correction (default: 7)\n" " <margin>: border width (default: 4)\n" "examples:\n" "qrcode \"Hello world\"\n"; return EXIT_FAILURE; } urls::url u = urls::parse_uri( "https://chart.googleapis.com/chart?cht=qr").value(); auto ps = u.params(); // Data ps.append({"chl", argv[1]}); // Size std::size_t width = argc < 3 ? 100 : std::stoll(argv[2]); std::size_t height = argc < 4 ? width : std::stoll(argv[3]); ps.append({"chs", std::to_string(width) + "x" + std::to_string(height)}); // Encoding if (argc >= 5) { core::string_view output_encoding = core::string_view(argv[3]) == "Shift_JIS" || core::string_view(argv[3]) == "ISO-8859-1" ? argv[4] : "UTF-8"; ps.append({"choe", output_encoding}); } // Error if (argc >= 6) { std::size_t err = std::stoll(argv[5]); std::string chld; if (err < 11) chld = "L"; else if (err < 20) chld = "M"; else if (err < 27) chld = "Q"; else chld = "H"; std::size_t margin = argc < 7 ? 4 : std::stoll(argv[6]); chld += "|"; chld += std::to_string(margin); ps.append({"chld", chld}); } std::cout << u << '\n'; return EXIT_SUCCESS; }