wordpress 独立页面下载/百度荤seo公司

wordpress 独立页面下载,百度荤seo公司,个人是否可以做网站,bootstrap做网站部门请来了软件专家袁英杰咨询师指导我们软件开发,从中我也学到了很多姿势,在此记录下来宝贵的经验。苹果的 mbp 品控真是差劲,写这个东西把 LShift 键 按坏了,真是难受。反射能做什么最近和大师聊软件设计,其中一个点…

部门请来了软件专家袁英杰咨询师指导我们软件开发,从中我也学到了很多姿势,在此记录下来宝贵的经验。苹果的 mbp 品控真是差劲,写这个东西把 LShift 键 按坏了,真是难受。


反射能做什么

最近和大师聊软件设计,其中一个点是关于反射,反射最大的作用就是序列化、解序列化一个结构体,然后就能够在各个模块之间进行通信交互,不管是跨进程也好,还是跨机器也好,都缺不了反射这个功能,这也是 OO 世界对象交互的载体。

不然就需要人工手写一堆序列化、反序列代码,不仅代码难看,而且工作量大,容易出错。印象最深的一个例子是,大师在一个电信项目,模块之间通过 TLV 格式的消息进行通信,而这些 TLV 格式也是内部实现的,还不是标准的,然后大师定义了一套机制,只需要统一声明一次元数据的信息,然后通过 include 不同头文件,就能对同一个元数据进行不同的解释,比如序列化、解序列到数据库,序列化、解序列到网络,这也是预编译多态技术,仅用 C 98 的特性就能做到。

举一个直观一点的例子,比如打印一个结构体内容(其实就是把结构体转换成字符串):

struct Point {    double x;    double y;};Point p { 1, 2 };

那么你可能会这样写:

printf("Point x = %d y = %d", p.x, p.y);

如果有成千上百个结构体,对应的打印函数(序列化到字符串)也就成千上百个,如果利用反射手段,只需要写一次,就能给所有反射对象自动生成打印函数(转换)代码。


引子

后来我在 C 社区看到一个讨论,说 C 20 在元编程方面提供了很多便利,其中最大的遍历就是 if-constexpr,再也不用模式匹配写一堆enable_if 了,然后题主给了一个例子,用 C 20 的模板元求结构体的字段数量,代码如下:

struct AnyType {    template <typename T>    operator T();};
template <typename T>consteval size_t CountMember(auto&&... Args) {    if constexpr (! requires { T{ Args... }; }) { // (1)        return sizeof...(Args) - 1;    } else {        return CountMember(Args..., AnyType{}); // (2)    }}
int main(int argc, char** argv) {    struct Test { int a; int b; int c; int d; };    printf("%zu\n", CountMember());}

看到这坨代码,我愣了一会,然后问大师这个求结构体字段数量是怎么做到呢?C 目前最大缺陷是缺少静态反射能力(这里指的是语言层面提供的静态反射信息,C 23估计会落地),应该很难做到的,分析了一会,终于看懂了,太巧妙了:

1. AnyType声明了类型转换操作符(《C Modern design》书中的术语是稻草人函数),可以转换成任意类型。

2. 分支 (2) 通过不断构造所求类型 T = Test,当无法构造时(1),也就是输入的参数过多,这时候参数个数 - 1就是字段个数。

那么只能 C 20 才能做到么?这里主要用到了 C 17 的if-constexpr特性,C 11可以通过 enable-if 做到,而最主要的是那个 requires,C 20 才支持 concept,C 17 都无法做到。

然后我思考了一下,类型构造,《C Modern design》这本书讲过,用 sizeof 做类型推导,给的一个例子是判断一个类是否是另一个类的基类,仅通过 C 98 实现。

C 11 编译期有有两大神器:sizeof   decltype,然后用这两者就能实现同样的功能,这里我用 decltype 来解决上述的 concept 问题:

template <typename T, typename = void, typename ...Ts>struct CountMember {    constexpr static size_t value = sizeof...(Ts) - 1;};
template <typename T, typename ...Ts>struct CountMember, Ts...> {    constexpr static size_t value = CountMembervoid, Ts..., AnyType>::value;};
int main(int argc, char** argv) {    struct Test { int a; int b; int c; int d; };    printf("%zu\n", CountMember::value);}

同样两种情况,用 decltype(T{Ts{}...}) 来判断是否能够构造对象 T。

如何求宏的可变参数个数?

其实这个问题价值不大,而且强依赖平凡构造函数,最大价值在后面的讨论,大师给我出了一道题,如何求宏的可变参数个数?虽然一时半会写不出来,但是之前还是看过一些框架代码的,最终实现方式如下:

#define GET_NTH_ARG(                                                                        \    _1,  _2,  _3,  _4,  _5,  _6,  _7,  _8,  _9,  _10, _11, _12, _13, _14, _15, _16,         \    _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32,         \    _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48,         \    _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, n, ...) n
#define GET_ARG_COUNT(...) GET_NTH_ARG(__VA_ARGS__,                     \        64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, \        48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \        32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, \        16, 15, 14, 13, 12, 11, 10, 9,  8,  7,  6,  5,  4,  3,  2,  1)

GET_ARG_COUNT(a, b, c)展开后,会调用GET_NTH_ARG,然后得到GET_NTH_ARG(a, b, c, 64, 63, ..., 3, 2, 1) 3,从而得到最终长度 3,进一步延伸,这个宏有什么作用呢?那就是对结构体进行反射,用宏提供结构体的元数据信息,从而生成一些类型信息代码。

结合之前看到的那个框架,与大师进一步交流,发现新世界,解决多年来 cpp 静态反射问题,一下子让很多事变成了可能。(后来找到这个实现方法的最早出处:http://pfultz2.com/blog/2012/07/31/reflection-in-under-100-lines/)

来看看大师 actor 框架中的反射例子:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香草 jboss 工具_如何为JBoss Developer Studio 8设置BPM和规则工具

香草 jboss 工具最新的JBoss Developer Studio&#xff08;JBDS&#xff09;的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中&#xff0c;我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进…

局域网steam联机_适合和基友联机一起玩的单机游戏(1)

GTA5还有什么比在GTA中&#xff0c;和几个好基友一起&#xff0c;组建帮派&#xff0c;联机打砸抢&#xff0c;组队完成任务&#xff0c;和其他帮派火并更有意思的呢&#xff1f;游戏丰富的内容&#xff0c;各式各样的玩法&#xff0c;广袤的可探索空间&#xff0c;不愧是史上最…

C/C assert()函数用法总结与注意事项

1. 简介assert宏的原型定义在中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行。原型定义&#xff1a;#include void assert( int expression );assert的作用是先计算表达式 expression &#xff0c;如果其值为假&#xff08;即为0&#xff09;&#xff…

ppt flash倒计时器_PPT三大神器之iSlide插件

本文约1200字&#xff0c;阅读预计需要4分钟。为了提升PPT制作效率&#xff0c;我们有必要使用一些插件来提升工作效率&#xff0c;而PPT有三大插件神器&#xff0c;分别是iSlide、PA口袋动画&#xff0c;Onekey Tool&#xff08;俗称OK插件&#xff09;&#xff0c;今天我们就…

C 语言中std::array的神奇用法总结

std::array是在C 11标准中增加的STL容器&#xff0c;它的设计目的是提供与原生数组类似的功能与性能。也正因此&#xff0c;使得std::array有很多与其他容器不同的特殊之处&#xff0c;比如&#xff1a;std::array的元素是直接存放在实例内部&#xff0c;而不是在堆上分配空间&…

java线程池并发_线程池之外:Java并发并不像您想象的那样糟糕

java线程池并发Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff…

网络营销理论模型_网络营销:课堂笔记(第四章下)

网络营销产品策略(续上篇)本章知识清单三、网络品牌如何打造&#xff1f;什么是品牌目前为止&#xff0c;对品牌的含义一直没有一个统一的、权威的解释。如果从品牌的构成要素和基本功能方面来界定品牌的话&#xff0c;最具有代表性和最经典的表述当属美国市场营销协会的定义。…

ios多线程Android,iOS 关于多线程

一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的&#xff0c;每个进程均运行在其专用且受保护的内存空间内比如&#xff1a;同时打开QQ&#xff0c;Xcode&#xff0c;系统就会分别启动2个进程通过”活动监视器”可以查看Mac系统中所开启…

websockets_使用用户名/密码和Servlet安全性保护WebSockets

websocketsRFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们来谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&…

android横向排列 间隙,Android开发消除横向排列的多个Button之间的空隙

一.问题重述摘要里描述的可能不太清楚&#xff0c;问题如下图&#xff1a;如何消除Button1和Button2之间的空隙&#xff0c;以及Button与左右边界之间的空隙&#xff1f;二.问题根源这里出现的空隙其实是Button的背景图片中的透明部分&#xff0c;如下图&#xff1a;(两个按钮被…

电脑的发展史_互联网发展史 硅谷传奇之 IBM

2节 硅谷传奇之 IBM为什么要讲IBM呢&#xff1f;互联网是因计算机而诞生的&#xff0c;互联网的发展史与电脑的发展史有很多是重叠的&#xff0c;而IBM是上世纪60年代八大电脑公司之首。在互联网席卷全球之前&#xff0c;在硅谷是以无线电、军事技术、硅晶体管而闻名的。这些东…

android汉字田字格,画一个简单的田字格

image.png上代码package com.nick.customview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.support.annotation.Nullable;import android.sup…

xp定时关机软件_好用又免费的电脑定时工具,不用得后悔

现在利用电脑办公的人有多少&#xff0c;举个手示意下&#xff01;&#xff01;&#xff01;给电脑设置定时关机&#xff0c;可以方便我们不在电脑前完成关机操作。那么&#xff0c;如何设置定时关机呢&#xff1f;如果要取消&#xff0c;定时关机又如何取消&#xff1f;有的人…

apache camel_Apache Camel请向我解释这些端点选项的含义

apache camel在即将发布的Apache Camel 2.15中&#xff0c;我们使Camel更智能。 现在&#xff0c;它可以充当老师&#xff0c;并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解…

android照片备份软件下载,照片备份云相册app下载-照片备份云相册下载V1.9安卓版-西西软件下载...

这款软件主要为安卓手机用户提供照片图片等备份的服务&#xff0c;通过照片备份云相册app可以轻松的为更多手机空间不够的用户清理出手机空间&#xff0c;照片图片等的是最不容易发现占用空间的&#xff0c;现在有了照片备份云相册app就能轻松让手机内存足够使用哦。照片备份云…

手机照片导入电脑步骤_如何将手机中的照片、视频快速的保存到U盘上?3分钟教你详细步骤...

手机拍照功能是越来越强大了。生活中&#xff0c;不少的朋友都喜欢拍照。拍着拍着不知不觉就存了许多的照片&#xff0c;占用很大的空间。手机照片和视频都是我们非常重要的回忆&#xff0c;许多人都不愿意删除。为了节省我们手机的空间&#xff0c;许多人都会选择将手机照片导…

筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份

筒仓计算表格分析公司Quocirca的最新研究证实&#xff0c;现在许多企业的外部用户比内部用户更多&#xff1a;在欧洲&#xff0c;有58&#xff05;的企业直接与其他企业和/或消费者的用户进行交易&#xff1b; 仅在英国&#xff0c;这一数字就达到了65&#xff05;。 如果回顾历…

C/C 宏替换详解

1. 基本形式#define name replacement_text 复制代码通常情况下&#xff0c;#define 指令占一行&#xff0c;替换文本是 define 指令行尾部的所有剩余部分&#xff0c;但也可以把一个较长的宏定义分成若干行&#xff0c;这时需要在待续的行末尾加上一个反斜杠符 。宏定义也可以…

win10更新助手_快升级!win10精简版不到10G,比win7还干净流畅,无需更新!

在整个PC端操作系统中&#xff0c;最成功的得主自然要说微软。毕竟微软发布的XP、win7操作系统那可是风靡全球&#xff0c;占用的用户资源十分庞大。单单因为这两个操作系统就吸引到了足够的用户&#xff0c;整个装机下载量可真不是盖的&#xff0c;说微软是PC端的"老大&q…

openshift命令_使用命令行工具创建WildFly OpenShift应用程序

openshift命令通过使用快速入门&#xff0c;可以轻松地在OpenShift上配置WildFly的新实例。 只需单击一下&#xff0c;您就可以准备就绪&#xff01; 通常&#xff0c;OpenShift的高级用户使用命令行工具 。 但是&#xff0c;您无法使用CLI工具创建WildFly墨盒。 但现在已解决…