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

爱站网为什么不能用了SEO优化网站建设价格

爱站网为什么不能用了,SEO优化网站建设价格,wordpress餐饮,申请个人网址一、非侵入式的静态反射(自省) 在前面分析过,反射有静态和动态两类形式,前者在编译期实现,后者在运行期实现。而针对c这类天然不支持(或者说极弱支持)反射的语言,在实现上又可以分为…

一、非侵入式的静态反射(自省)

在前面分析过,反射有静态和动态两类形式,前者在编译期实现,后者在运行期实现。而针对c++这类天然不支持(或者说极弱支持)反射的语言,在实现上又可以分为侵入式和非侵入式实现。这个就更好理解了,侵入式需要在原代码上增加一些辅助代码,而非侵入式则不需要增加辅助代码。这个只要过一下脑子当然是后者好,但实际应用上到底哪种好,得看实际情况,不能一概而论。

二、利用宏实现静态反射

在前面的文章《C++中两个宏__PRETTY_FUNCTION__和__FUNCSIG__的应用》介绍过这两个宏(其实是一种宏),它可以对c++程序在编译期和运行期的问题所在有一个记录并反馈给开发者(也提到过使用这个宏可以实现一种编译期反射的方法)。但是不知道有没有读者注意到那篇文章的例程中运行结果的一些细节,它可以得到一些参数的类型。噢,这不就是反射想达到的一种目的么?那可不可以利用这个宏来实现一种反射的方式呢?答案是肯定的。先看一个简单的例子入手:

#include <iostream>
#ifdef _WIN64
#define __FUNC__ __FUNCSIG__
#else
#define __FUNC__  __PRETTY_FUNCTION__
#endiftemplate<typename T>
constexpr void Func()
{std::cout << __FUNC__ << std::endl;
}void getType() {Func<int>();
}
int main()
{getType();
}

它的运行结果是:

//gcc
constexpr void Func() [with T = int]

这是不是很明显可以看到T的类型是int,那么最暴力最原始的方法就是直接对这个字符串进行解析,然后得到T和int,这样不就可以得类型了么。看一下下面的例子:

#include <iostream>
#include <string>#ifdef _WIN64
#define __FUNC__ __FUNCSIG__
#else
#define __FUNC__  __PRETTY_FUNCTION__
#endifstd::string_view parseResult(std::string result) {//str = constexpr void Func() [with T = int]auto begin = result.find("T = ") + 4;auto end = result.find_last_of("]");return std::string_view{ result.data() + begin, end - begin };
}
template<typename T>
constexpr auto TypeInfo() {auto result =  __FUNC__;return parseResult(result);
}class Example{int d = 0;void GetData(){std::cout<<"test"<<std::endl;}
};int main()
{auto type = TypeInfo<Example>();std::cout<<type<<std::endl;type = TypeInfo<int>();std::cout<<type<<std::endl;type = TypeInfo<double>();std::cout<<type<<std::endl;}

运行结果:

Example
int
double

当然针对不同的编译器和平台可能还会需要进行细节上的修改,但整体上的原则基本是相同的。

三、例程

下面再看一个针对枚举体的例程。枚举体是一种比较特殊的情况,它可以和整数隐式转换。C++11又推出了枚举类,看看下面的例子:

#include <iostream>
#include <string>#ifdef _WIN64
#define __FUNC__ __FUNCSIG__
#else
#define __FUNC__  __PRETTY_FUNCTION__
#endifenum class DataType{USB,PCI,HD};
enum DType{USB,PCI,HD};template<auto T>
constexpr  auto TypeInfo()
{std::string type = __FUNC__;auto begin = type.find("T = ") + 4;auto end = type.find_last_of(']');return std::string_view{ type.data() + begin, end - begin };
}int main()
{std::cout<<Func1<DataType::HD>()<<std::endl;std::cout<<Func1<DType::HD>()<<std::endl;
}

运行结果:

DataType::HD
HD

今天把使用宏__PRETTY_FUNCTION__来实现静态非侵入式的反射进行了一个初步的分析说明,然后下一步将继续分析枚举的反射,从此处打开一个缺口,让大家更好的明白反射的实现方式的一个切入点。

四、总结

反射写起来非常头痛,一个是不知道如何说起更有系统性;另外一个就是哪种反射更有利于实际的应用。所以反射这个系列可能会是一个很长期的总结过程,大家不要着急,一定会把坑慢慢填好。

http://www.yayakq.cn/news/916961/

相关文章:

  • 做电影网站用什么空间中网的官方网站
  • php网站开发学习珠海市住房和城乡建设厅网站
  • 网站建设规划开通微信公众号要钱吗
  • 文化传播公司网站模板拼多多刷单网站开发
  • 中山网站建设文化价格手机淘宝客网站建设
  • 社交网站前端招聘去哪个网站
  • 网站怎么做移动端的百度app安装下载
  • 做网站要注意哪些方面宜兴做阿里巴巴网站
  • 建论坛型网站旅游网站对比模板下载
  • 网站建设7个基本流程分析网站上动态图片怎么做
  • 湖北建设银行官方网站首页网站设计一般多少钱一个页面
  • 成都网站网页制作哪些网站做夜场女孩多
  • 青海旭云网络做网站需要多少钱网站 服务 套餐
  • 网站维护服务基本内容wordpress页面属性排序
  • 深圳网站建设公司盛世华彩网站 概念设计
  • 网站如何设置默认首页网站网站建设专业
  • 在搜狐快站上做网站怎么跳转wordpress4.8 zh_CN
  • 新开网络游戏排行关键词排名快照优化
  • 网站服务器模式网站标题关键词堆砌
  • 小网站模板下载地址个人网站还用备案吗
  • 1网站免费建站网站配置域名这样做
  • 做泥软件下载官方网站公司网站二维码怎么做
  • 盐城手机网站制作做网站需要会什么 知乎
  • 江苏专业做网站网站域名备案时间查询
  • 烟台H5网站设计最好用的手机编程软件
  • 高并发网站建设深圳宝安区有几个街道
  • 新建茶叶网站文章内容建设wordpress固定地址404
  • 珠海仿站定制模板建站推广普通话写好规范字手抄报
  • 海外学校网站建设wordpress vue模板
  • 网站建设公司兴田德润i优惠吗jrs直播(无插件)直播极速体育360