1.SpringCloud微服务实战——搭建企业级开发框架(十九):Gateway使用knife4j聚合微服务文档
2.期货软件TB系统源代码解读系列19-函数上穿、源码下跌
3.5分钟掌握cmake(19): 使用 SYSTEM 关键字忽略三方库头文件的源码编译警告
SpringCloud微服务实战——搭建企业级开发框架(十九):Gateway使用knife4j聚合微服务文档
本篇内容聚焦于Spring Cloud Gateway网关如何集成knife4j,实现对所有Swagger微服务文档的源码聚合。首先,源码在gitegg-gateway项目中引入knife4j依赖,源码若无后端编码需求,源码收邮件源码仅引入swagger前端ui模块即可。源码随后,源码对配置文件进行修改,源码增加knife4j与Swagger2的源码配置。接下来,源码我们将重点介绍如何在微服务架构下,源码通过网关动态发现并聚合所有微服务文档的源码业务编码。 在使用Spring Boot等单体架构集成swagger时,源码通常通过包路径进行业务分组,源码并在前端展示不同模块。牛品源码网然而,在微服务架构中,每个服务相当于一个独立的业务组。在Spring Cloud微服务架构下,通过重写提供分组接口的代码(如springfox-swagger提供的swagger-resource接口),可实现通过网关动态发现并聚合所有微服务的文档信息。具体实现代码如下: 通过访问gitegg-gateway服务地址(/wmz/GitEg...的chapter-分支中。 GitEgg-Cloud是基于SpringCloud整合搭建的企业级微服务应用开发框架,旨在提供一站式解决方案,帮助开发者高效构建微服务应用。项目开源地址如下: Gitee: / GitHub: /期货软件TB系统源代码解读系列-函数上穿、下跌
理解期货软件中的函数CrossOver与CrossUnder,对于交易策略的实现至关重要。这两者在技术分析中代表了价格穿越某一水平线的关键时刻。代码实现过程相对直接且逻辑清晰,饿狼主图源码通过条件判断与循环结构,准确捕捉价格变动趋势。
让我们以CrossOver函数为例进行解析。首先,定义了两个数值序列参数Price1和Price2,用于表示两个价格序列。接着,声明了布尔型变量Con1与PreCon,用于判断与保存特定条件下的价格关系。变量Counter用于追踪当前处理的k线位置。
在开始部分,通过条件判断Price1是否大于Price2,如果成立,则执行一系列操作。首先,seata源码解析 图灵将Counter设为1,然后更新Con1,检查前一价格是否相等。接着,利用循环结构,不断更新Counter和Con1,直到条件不再满足或Counter达到当前k线索引值。在此过程中,记录了价格的穿越情况,并将结果赋值给PreCon,表示价格穿越的最终状态。最终返回PreCon值,作为函数输出。
与CrossOver类似,CrossUnder函数主要通过修改条件判断为Price1小于Price2,2022微交易源码实现对价格下降趋势的捕捉。通过同样的逻辑结构,准确识别价格穿越的情况。
为了验证函数的实际效果,我们尝试将KD指标(动量指标)与上述函数结合,实现简单的程序化交易策略。通过对比使用CrossOver与CrossUnder函数的交易结果,我们发现两者在实际操作中的效果基本一致,这反映了函数在策略实现中的简洁性和高效性。
实际上,CrossOver与CrossUnder函数的使用并不复杂,它们的核心逻辑在于条件判断与循环结构的巧妙结合。在编写交易策略时,选择合适的函数能够帮助我们更加精确地捕捉价格变动,进而优化交易决策。
总的来说,期货软件中的函数CrossOver与CrossUnder为交易者提供了一种直观且有效的工具,用于分析价格趋势并执行交易策略。通过理解和应用这些函数,交易者能够更加灵活地调整和优化自己的投资策略,实现更为精准的市场预测和操作。尽管在特定情况下可能有多种实现方法,但函数本身的设计简洁明了,易于理解和实现,是程序化交易领域中不可或缺的元素。
5分钟掌握cmake(): 使用 SYSTEM 关键字忽略三方库头文件的编译警告
1年前,@大缺弦 在 CMake 官方仓库中为 add_subdirectory() 增加了 SYSTEM 关键字 (FetchContent_Declare 也加了, 不过我还没用过这个函数), 并在 CMake 3. 版本中正式发布。 本文提供一个简单的例子, 展示个人对 add_subdirectory(xxx SYSTEM) 的理解。
2. 复现工程代码
2.1 目录结构
有如下的目录结构:在自己的工程example 下, 引入了第三方的工程 hello: 可以是完全基于源代码的三方工程, 也可以是头文件 + 库文件的形式, 异或是 header-only 的三方库。 即:
hello 子目录是别人工程的源码:
或如下的目录结构: hello 子目录是头文件 + 预编译好的库 + CMakeLists.txt:
或者 header-only 形式:
无论是哪种形式,hello/hello.h 这一头文件, 都会被自己的源代码 test_hello.cpp 包含, 从而参与到 example 工程的构建中。 而 example 工程可能使用了和 hello 不同的 "treat warning as errors" 设定, 会导致 hello.h 在 hello 工程中不会编译报错, 但在 example 工程中就会报错了。
我们的预期是:hello.h 在参与到 example/test_hello.cpp 的预处理过程时, 不要使用 example/CMakeLists.txt 里的严格的编译报错设定, 放宽它的编译报错等级; 同时保持 test_hello.cpp 自身的 cpp 代码, 仍然是被严格处理的。
2.2 头文件 hello.h 内容
2.3 test_hello.cpp 内容
2.4 根目录 CMakeLists.txt 内容
2.5 完整工程
github.com/zchrissirhcz...
3. Linux下的运行结果和分析
3.1 运行结果: 使用 SYSTEM 后, 头文件 hello/hello.h 不再触发编译报错
3.2 检查 compile_commands.json 里的具体编译命令, -I 被 -isystem 替代
3.3 -I 和 -isystem 的区别是什么? man gcc 可以知道, 被 -isystem 指定的目录, 会被当作标准系统目录对待:
而人们提到的
-isystem
会忽略自行在 makefile/CMakeLists.txt 中指定的 warning, 可以在 gcc 在线文档中找到:
3.4include_directories() 和 target_include_directories() 也可以用 SYSTEM 在 How to suppress GCC warnings from library headers? 问答中, 有人提到可以在 include_directories() 中指定 SYSTEM 关键字来抑制编译警告:
查看文档得到验证:
实际上,
target_include_directories()
也可以用
SYSTEM
关键字, 也是生成
-isystem
的编译命令:
查看 compile_commands.json 验证:
4. 使用 -isystem 的进一步探讨
4.1 -Wsystem-headers 开启 system headers 的 warning man gcc 可以知道, 提供的 -Wsystem-headers 编译选项, 是把 system headers 里的警告开启, 也就是说当你用 -isystem 指定了一个三方库路径后, 如果想开启它里面的 warning, 可以用 -I 替代 -isystem 来开启 warning, 也可以用 -Wsystem-headers 来开启 warning:
4.2 使用 -fsystem-headers 的提议 (尚未实现)
在 Bug - Create hybrid of -I and -isystem that is like -I but deactivates warnings 中有人提到, 人们使用 -isystem /some/path 替代 -I /some/path, 有点滥用系统头文件路径的问题, 考虑让 gcc 增加 -fsystem-headers 参数, 进而使用:
来让/some/path 被搜索时忽略警告。 不过这个 feature 尚未实现。
5. MSVC 下的结果
MSVC 使用/I, 和 GCC 的 -I 对应; MSVC 使用 /externel:W0, 和 GCC 里的 -isystem 对应。
作为实验, 先前-Werror=shadow 的写法, 在 MSVC 下要更换为:
6. 总结
CMake 中, 有如下几个命令, 都可以使用SYSTEM 关键字, 使得被添加的头文件搜索目录中, 头文件里的 warning 完全被编译器忽略:
上述这些 cmake 命令, 是映射-I dir 为 -isystem dir, 根据 GCC 文档, -isystem 指定的 dir 被当作标准系统头文件目录:
由于编译器本身忽略了-isystem 指定目录中的警告, 那么开发者在 CMakeLists.txt 里指定的 treat warnings as errors 的设定, 由于没捕获到这些目录里的 waring, 因而不会触发编译报错。 这是一种避免陷入修改第三方库头文件源码的方法, 它仅对于头文件有效, 对于 add_subdirectories() 引入的源代码文件 (.c/.cpp) 不起作用。
在 GCC 和 MSVC 下,SYSTEM 关键字都起作用。
7. References
本文使用 Zhihu On VSCode 创作并发布
2024-11-20 01:18
2024-11-20 00:36
2024-11-20 00:34
2024-11-20 00:20
2024-11-20 00:17
2024-11-19 23:34
2024-11-19 23:21
2024-11-19 23:06