当前位置: 首页 > wzjs >正文

与做网站的人怎么谈判网站改版模版

与做网站的人怎么谈判,网站改版模版,辽宁大连直客部七部是什么件,一个平台维护三天正常吗本课为 fswatch(第一“杰”)的示例项目加上对配置文件读取的支持,同时借助 第三“杰” CLI11 的支持,完美实现命令行参数与配置文件的逻辑统一。 012-nlohmann/json-4-项目应用 项目基于原有的 CMake 项目 HelloFSWatch 修改。 C…

本课为 fswatch(第一“杰”)的示例项目加上对配置文件读取的支持,同时借助 第三“杰” CLI11 的支持,完美实现命令行参数与配置文件的逻辑统一。 

012-nlohmann/json-4-项目应用

项目基于原有的 CMake 项目 HelloFSWatch 修改。

  • CMakeLists.txt :该文件基于原项目,没有任何改动。

  • .vscode/setting.json ,改动如下:

{   "cmake.debugConfig": {"cwd": "${workspaceFolder}","args": ["-m", "3", "--log-level", "info"],"externalConsole": false}
}

重点:

①  args字段:添加命令行参数;

② cwd 字段:设置程序在项目根目录下运行(而在程序所在的 build 子目录内)。

  • myConfig.json 测试用的配置文件
{"paths": [ "c:\\tmp", "c:/tmp/aaa" , "d:/tmp" ],"maxOutput": -1,      "createdOnly" : false,"destination": "d:\\我的学习资料","toBase64": [".png", ".jpg", ".jpeg"],"toSnappy": [".txt", ".pdf"],"logFile": ".\\log\\log.txt","logLevel": "off"}
  • main.cpp
#include <ctime>#include <iostream>
#include <iomanip>
#include <memory> // 智能指针 shared_ptr<>#include <libfswatch/c++/monitor_factory.hpp>
#include <CLI/CLI.hpp> #include <nlohmann/json.hpp>#include "myiconv.hpp"using json = nlohmann::json;namespace Watch::settings
{
//----------------------------------------------    // 日志级别(暂使用手工定义,007杰讲改用三方库中的定义)
enum class LogLevel 
{// 跟踪、调试、信息、警告、错误 、危急、关闭trace, debug, info, warn, err, critical, off
};// 让枚举 LogLevel 支持与JSON双向转换
NLOHMANN_JSON_SERIALIZE_ENUM(LogLevel,
{{LogLevel::trace, "trace"},{LogLevel::debug, "debug"},{LogLevel::info, "info"},{LogLevel::warn, "warn"},{LogLevel::err, "err"},{LogLevel::critical, "critical"},{LogLevel::off, "off"}
})// 配置数据的结构体
struct Config
{std::vector<std::string> paths;int maxOutput = -1;bool createdOnly = false;std::string destination; std::vector<std::string> toBase64;std::vector<std::string> toSnappy;std::string logFile = "./log.txt";LogLevel logLevel = LogLevel::off;     
};NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Config,     paths, maxOutput, createdOnly, destination, toBase64, toSnappy, logFile, logLevel)std::string getLogLevelName(LogLevel ll)
{json j = ll;return j.get<std::string>();
}std::map<std::string, LogLevel> logLevelNameMap
{{getLogLevelName(LogLevel::trace), LogLevel::trace},#define llNameItem(ll) {getLogLevelName(LogLevel::ll), LogLevel::ll}llNameItem(debug),llNameItem(info),llNameItem(warn),llNameItem(err),llNameItem(critical),llNameItem(off)#undef llNameItem
};// 配置数据“格式器”
class MyCLIConfigAdaptor : public CLI::Config
{
public:// 如何从 JSON 数据读出 各个配置项std::vector<CLI::ConfigItem> from_config (std::istream &input) const override;// 如何从app,生成配置文件内容(字符串)std::string to_config (CLI::App const* app, bool default_also, bool write_description, std::string prefix) const override{ return ""; }
};std::vector<CLI::ConfigItem> MyCLIConfigAdaptor::from_config (std::istream &input) const 
{try{json j = json::parse(input, nullptr, true /*允许异常*/, true /*允许注释*/);auto cfg = j.get<settings::Config>();auto items = std::vector<CLI::ConfigItem>{{{}, "paths", cfg.paths },{{}, "max-ouput", { std::to_string(cfg.maxOutput) }}, // 视频中误为 "max-count"{{}, "created-only", { cfg.createdOnly? "true" : "false"} },{{}, "destination", { cfg.destination }},{{}, "to-base64", cfg.toBase64},{{}, "to-snappy", cfg.toSnappy},{{}, "log-file", {cfg.logFile}},{{}, "log-level", {std::to_string(static_cast<int>(cfg.logLevel))}}};return items;}catch(json::exception const& e){std::cerr << "JSON 配置数据有误。" << e.what() << std::endl;}catch(std::exception const& e){std::cerr << "读取并转换配置数据发生异常。" << e.what() << std::endl;}return {};
}//----------------------------------------------    
} // namespace Watch::settingsWatch::settings::Config theConfig; // 全局唯一的配置// 返回值:必须是 void,入参必须是 std::vector<fsw::event> const & 和 void *
void on_file_changed(std::vector<fsw::event> const & events, void *)
{/* 略,保持原有实现不变;本课,配置数据尚未发挥作用 */    
}int main(int argc, char** argv) // 主函数
{// 一、定义一个CLI::App 的变量CLI::App app("HelloFSWatch");// 1.1 指定(默认的)配置文件app.set_config("--config", "./myConfig.json", "指定配置文件");// 1.2 创建并指定定制的配置数据格式解析器app.config_formatter(std::make_shared<Watch::settings::MyCLIConfigAdaptor>());// 二、添加命令行参数try{app.add_option("paths", theConfig.paths, "待监控的文件夹路径(可含多个)")->required();app.add_option("--max-output,-m", theConfig.maxOutput, "启动后输出事件个数")->default_val(-1);app.add_flag("-c,--created-only", theConfig.createdOnly, "只关注新建信息");app.add_option("--destination,-d", theConfig.destination, "输出文件路径")->required();app.add_option("--to-base64", theConfig.toBase64,"需要转成base64的文件的扩展名(数组)");app.add_option("--to-snappy", theConfig.toSnappy, "需要转成snappy的文件的扩展名(数组)");app.add_option("--log-file", theConfig.logFile, "日志文件路径")->default_val("./log.txt"); app.add_option("--log-level", theConfig.logLevel, "可输出的最小日志级别")->default_val(Watch::settings::LogLevel::off)->transform(CLI::CheckedTransformer(Watch::settings::logLevelNameMap));// 三、开始解析命令行app.parse(argc, argv);}catch(std::exception const& e){std::cerr << e.what() << std::endl;return -1;}// 显示当前生效的配置数据json j = theConfig;std::cout << "\n当前发挥作用的配置是:\n" << j.dump(2) << std::endl;auto *monitor = fsw::monitor_factory::create_monitor(system_default_monitor_type,theConfig.paths,on_file_changed);// 启动监控monitor->start();  // 进入死循环
}


文章转载自:

http://ZuAKWOv9.rsszk.cn
http://xoKLAK4F.rsszk.cn
http://E2mJfBUX.rsszk.cn
http://bY9l04xO.rsszk.cn
http://P5YlaIov.rsszk.cn
http://Bg8QRDnJ.rsszk.cn
http://KEB27vDT.rsszk.cn
http://ny5rWECM.rsszk.cn
http://mkUsmYBQ.rsszk.cn
http://6H7ZbcvF.rsszk.cn
http://pUak8tkO.rsszk.cn
http://RvGsHJgK.rsszk.cn
http://L1YbIXxN.rsszk.cn
http://Z1bd4vig.rsszk.cn
http://nxeqk8j3.rsszk.cn
http://qmX60iha.rsszk.cn
http://SJIak2da.rsszk.cn
http://TBDZadmE.rsszk.cn
http://tbGXlgJx.rsszk.cn
http://1kij9uTy.rsszk.cn
http://PmRICmbx.rsszk.cn
http://OM0uIs38.rsszk.cn
http://1DCaQrHP.rsszk.cn
http://CcRS3Vch.rsszk.cn
http://70lvQlcg.rsszk.cn
http://Rof3V9fg.rsszk.cn
http://TdwoOO5a.rsszk.cn
http://yudHYi28.rsszk.cn
http://IVDhXzCD.rsszk.cn
http://9IJ52W0u.rsszk.cn
http://www.dtcms.com/wzjs/605186.html

相关文章:

  • 网站推广方案成都公司注册流程完整版
  • asp网站文章自动更新镇江大港属于哪个区
  • 做网站怎么添加关键词成都网站制作售后
  • 公司网站策划做app的网站有哪些功能
  • 如何做网站实名认证南宁网站开发外包报价
  • 国外素材设计欣赏网站山西龙采网站建设合同
  • 广州企业网站建设推荐海外社交媒体运营
  • 庆阳网站优化公司做羊毛毡的网站
  • 北京网站搜索引擎优化深圳网站建设 联雅网络
  • 设计公司网站详情wordpress 4.2 zh cn
  • 品牌网站建设保障大蝌蚪wordpress id锁
  • 茶文化网站建设规划书范文网站优化的监测评价
  • 推广平台网站wordpress 盈利
  • 河源建网站wordpress 搜索框大小
  • 网站开发面试都会问什么问题90设计素材网官网
  • 用vue做网站的实例网站评论回复如何做
  • 哪里有网站建设的企业怎样做免费商城网站
  • 千图网素材下载网站用照片做模板下载网站好
  • 哪些是网站建设恢复正常百度
  • 母婴网站dede织梦重庆做网站的网络公司
  • 新公司网站建设北京企业网站开发
  • 什么网站做详情页好wordpress用户级别内容不同
  • 中性衣服印花图案设计网站大气一点的公司名字
  • 网站制作多少钱公司建网站怎么弄
  • 凡科网站制作平台品牌型网站建设公司
  • 五屏网站建设如何怎么在在慧聪网上做网站推广
  • 嘉兴cms模板建站网页设计与制作软件有哪些
  • 做报名表的网站崇信县门户网站官网
  • 天津谁做网站php外贸网站建设
  • 网站备案说主体已注销南阳建设网站制作