C++中实现C#属性相似的语法

【C#】C#高级语法 【C#】C#高级语法 1、特性(Attribute): 用于添加元数据。在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 预定义特性:AttributeUsage;Conditional;Obsolete 自定义特性:一个新的自定义特性应派生自System.Attribute类。 2、反射(Refl 阅读详情
#include<iostream>
#include<algorithm>
using namespace std;

template<typename ResultFunction,typename Function>
ResultFunction  function_cast(Function fun)
{
    ResultFunction result=ResultFunction(*(reinterpret_cast<int*>(&fun)));
    return result;
}


template<typename R,typename ClassType,typename Function>//,typename Function
class method_property_set
{
public:
    typedef void (*hook_function)(ClassType *ptr);
    hook_function set_fun,get_fun;
    ClassType *obj;
    method_property_set(ClassType *ptr,Function set,Function get):obj(ptr)
    {
        set_fun=function_cast<void (*)(ClassType*)>(set);
        get_fun=function_cast<void (*)(ClassType*)>(get);
    }
  operator R () const
  {
      get_fun(obj);
    return m_value;
  }
  int m_value;
  method_property_set<R,ClassType,Function> operator =(int value)
  {
      set_fun(obj);
      m_value=value;
  }
};

class Container
{
public:
  method_property_set<int,Container,void (Container::*)() >  Prop;
  Container():Prop(this,&Container::SetValue,&Container::GetValue){}
private:
  void SetValue()
  {
      cout<<"set the value of Prop"<<endl;
  }
  void GetValue()
  {
      cout<<"get the value of Prop"<<endl;
  }
  void SomeMethod()
  {
    int pr_val = Prop; // Uses the implicit conversion operator
    //cout<<"the value of pr_val:"<<pr_val<<endl;
  }
};


int main()
{
	Container con;//自动调用函数GetValue();
	con.Prop=100;//自动调用SetValue();
	cout<<"output the property of Prop:"<<con.Prop<<endl;
}

该程序改编自imperfect C++中part six,Chapter 35. Properties中的程序,程序经gcc编译运行顺利。

以上程序要将成员函数指针转换为非成员函数指针,会对程序的运行效率有影响。以下是另一版本的method_property_set类。

template<typename R,typename ClassType,typename Function>//,typename Function
class method_property_set
{
public:
    typedef void (ClassType::*HookFunction)();
    HookFunction set_fun,get_fun;
    ClassType *obj;
    method_property_set(ClassType *ptr,Function set,Function get):obj(ptr)
    {
          set_fun=set;
          get_fun=get;
    }
  operator R () const
  {
      (obj->*get_fun)();
    return m_value;
  }
  int m_value;
  method_property_set<R,ClassType,Function> operator =(int value)
  {
      (obj->*set_fun)();
      m_value=value;
  }
};


C++语法格式分析与C#对比 综上所述,C++和C#是两种流行的编程语言,它们在语法格式上有一些相似和不同之处。本文将对C++语法格式进行分析,并将其中的内容与C#进行对比,以便更好地理解这两种语言的区别和相似之处。除了上述提到的语法特性,C++和C#还有许多其他的语法特性,如运算符重载、模板、属性、委托等。可以看到,C++和C#在类和对象的定义方式上存在一些差异,尤其是在成员变量的访问权限上。可以看到,C++和C#在继承和多态方面有一些相似之处,但在语法细节上存在差异。可以看到,C++和C#在引入头文件和命名空间方面存在一些差异。 阅读详情

相关推荐

看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa

我是,今天我给大家分享一个关于RSA的题目,带大家领略的魅力。今天开始前,我们先学习一下。

m0_62102520的博客 853

C++ 11实现类似C#的属性语法

C#语言引入了属性的概念,可以在属性set时做一些验证。 本例使用C++11的std::function和lambda表达式模拟C#的属性,使用std::function存储验证函数,使用lambda表达式构造验证函数。(本例的思想是使用代理模式实现属性代理) 重点关注Property2模板类即可。这是作者在原有代码上的扩展。 代码结构如下, test/CMakeLists.txt cmake_minimum_required(VERSION 2.6) if(APPLE) message(STATUS

zhuge19870104的博客 647

CentOS 7下Multipath多路径存储的实战配置与性能优化

本文详细介绍了在CentOS 7系统中配置与优化Multipath多路径存储的完整实战流程。从安装部署、核心配置文件解读,到性能调优与生产环境避坑指南,全面解析如何利用Device Mapper Multipath构建高可用、负载均衡的存储链路,提升存储系统可靠性与I/O性能。

weixin_29278805的博客 320

[C/C++]属性的秘密——C++仿C#的属性实作

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378969的博客 289

OLED的字模提取(保姆级)---基于PCtoLCD2013

做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支...

qq_44886611的博客 7781

智能车竞赛轮腿穿越组:GPS+IMU导航绕桩实战技巧(附避坑指南)

本文详细介绍了智能车竞赛轮腿穿越组中GPS+IMU导航绕桩的实战技巧,包括硬件选型、传感器标定、路径规划及多传感器数据融合策略。通过实际案例和避坑指南,帮助参赛队伍提升导航精度和稳定性,避免常见错误。特别强调IMU安装位置和标定对导航系统的重要性。

gin88的博客 584

使用C++11实现类似C#的属性概念设计

原文地址在这:http://www.cnblogs.com/feng-sc/p/5742689.html 实现挺有意思的,看懂了代码也可以加深对C++知识的理解,是不错的小技巧,记录下来。 #include #define property_setter(variableType) [&](variableType value) #define property_getter(variable

俊哥有个Blog 1482

以太网硬件核心:MAC、PHY、MII与交换机原理与实战排查

计算机网络通信的基础依赖于一套完整的硬件协议栈。在OSI模型中,数据链路层和物理层是实现设备间可靠、高效数据传输的基石。其核心原理在于将上层数据包封装成帧,并通过特定的介质访问控制与物理信号转换机制进行传输。这一过程的技术价值在于为上层应用提供了透明、稳定的通信信道,是互联网和所有局域网通信的物理承载。在嵌入式系统、网络设备开发及运维等应用场景中,深入理解底层硬件交互至关重要。本文将聚焦于以太网硬件的两大核心组件:负责逻辑成帧与流量控制的MAC控制器,以及负责数模转换与链路协商的PHY芯片。它们通过MII、

dgqvhtlwq472235338的博客 424

用C++实现类似C#属性

C#属性的功能实际就是实现通过对成员变量的访问,间接调用背后的get,set方法,在C++中可以通过重载操作符实现。 代码: /***********************************************************************// LiFei                                                 

superlee19的专栏 897

从数据手册到代码:一步步解读SC7A20寄存器配置与加速度值换算原理

本文详细解析了SC7A20三轴加速度传感器的寄存器配置与加速度值换算原理。从数据手册出发,逐步拆解关键寄存器设置,并推导原始ADC值到物理加速度的完整换算过程,帮助开发者深入理解传感器底层工作原理,提升嵌入式开发效率。

weixin_29179311的博客 369

博途 V16(TIA portal V16)安装教程

本文提供了西门子TIA Portal V16软件的完整安装指南。内容包括百度网盘下载链接(提取码kv69)、详细安装步骤(关闭安全保护、典型安装设置)、授权破解方法,以及PLCSIM仿真功能的使用说明。重点演示了S7-1200 PLC程序的仿真过程,解析了仿真界面各元素功能,包括状态指示灯(RUN/STOP/ERROR)、操作按钮(RUN/STOP/MRES)和网络接口状态等。通过图文并茂的方式,完整呈现了从软件安装到PLC程序仿真的全流程操作。

lingchen1906的博客 6760

如何使用 C++ 11 实现 C# 属性概念设计

1、概述 本人对“C++实现C#属性概念”的研究决定并非一时冲动,而是原自于对技术的热爱。 用过C#的C渣渣程序员/媛都非常喜欢C#里面的属性的概念(注意,C#里的属性和成员变量之间是有区别的),可是C渣渣里并没有属性这个概念,于是,很多程序员/媛都想办法使用C渣渣抽象出类似C#中的属性的概念,当然我也不例外。 看过很多网友and同事写的C++属性实现方案,But似乎都没有找到很符合口味的实...

572

手把手教你学Simulink--基于多能源系统协同控制的复杂场景实例:氢燃料电池+锂电池混合动力电动汽车能量管理仿真

本文介绍了基于Simulink的氢燃料电池与锂电池混合动力电动汽车能量管理系统的建模与仿真方法。系统包含驾驶循环输入、燃料电池子系统、锂电池子系统、能量管理、电机驱动等模块,通过协同控制优化能源分配。详细说明了从模型创建到各子系统设置的7个步骤,并提供了MATLAB代码示例。该仿真可评估不同工况下的系统响应速度、能量利用效率和电池寿命等性能指标,为混合动力汽车的能量管理策略设计和优化提供参考。

MHD0815的博客 239

【转贴】在BCB中实现类C#属性声明语法

 【转贴】goldroc的专栏在BCB中实现类C#属性声明语法巧用宏命令,改造BCB——在BCB中实现类C#属性声明语法引子 余好程序,喜BCB(Borland C++ Builder)。一日见C#之属性声明,顿觉清爽。其后偶有所启,遂整以条理、载以文字,且冠文章之名。于夫同好而喜BCB者,或可有益。若是,其旨达矣。背景描述——宏的历史地位 面向对象的C++语言推出

Blackart的专栏 2021

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C#:基本语法看这一篇就够了

本文来自w3c教程的C#教程的学习笔记,对其中的示例有所删减与变更,建议以以下链接为准。C# 简介_w3cschool。

weixin_43431593的博客 3958

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

巧用宏命令,改造BCB——在BCB中实现类C#属性声明语法

巧用宏命令,改造BCB ——在BCB中实现类C#属性声明语法  goldroc引子 余好程序,喜BCB(Borland C++ Builder)。一日见C#之属性声明,顿觉清爽。其后偶有所启,遂整以条理、载以文字,且冠文章之名。于夫同好而喜BCB者,或可有益。若是,其旨达矣。背景描述——宏的历史地位 面向对象的C++语言推出后,曾经在C中极其重要的宏命令似乎变得很少使用了。连C++大师Bjarne

每天吃早饭 1993

C++和C#语法学习后的总结

C++和C#语法学习后的总结 经过这几个月的学习,在这里做个总结。最先开始是重新学习C++的语法,接下来学习C#,C#的语法和C++很相似,C#没有指针,不支持多继承,但可以继承多个接口,算是弥补不能多重继承类,C#中全部都是类封装起来,没有单独的变量或函数,main()函数也是在一个类中。以下是具体的总结: 1、C++方面(这里我只讲诉对于我之前没完全掌握的东西,略微凌乱) 1)重载:有函数重载...

qq_37271216的博客 387

C#调用C++托管类,实现C#和C++的混合编程

由于C#编写的是托管代码,编译生成微软中间语言,而C++代码则编译生成本地机器码(这种C++也有叫做本地C++或者非托管C++,VC6.0就是用于开发非托管C++代码的平台),这两种语言进行混合编程就存在一定困难。比较常用的方法是使用DllImport的方法,这种方法在网上有很多介绍,这里就不详细叙述了。但是用过这种方法的人都知道这种方法对于导出函数还可以但是却没法导出非托管C++类!非常的要命。 然而,除了C#、非托管C++外,C系列中还存在一种语言叫做托管C++,这种语言语法上和非托管C++几乎一..

AI浩 6241

C#语法基础

隐式转换(implicit conversions)和显式转换(explicit conversions)。ref 可以使传入函数的参数改变值(相当于C++里的&),甚至改变数据类型。public class B : A = > B类继承A类。Abstract:不允许实例化,接口可以不实现,等待子类实现。WriteLine方法,参数($“for i={i}”)用于注册信息,生成代码(无聊重复的,优化,适配)Interface:声明类型和规范,不具体实现。用于动态获取类的信息,包括变量、函数。

qq_66473536的博客 2255

Java语法和C#语法有哪些异同?

2、数据类型:Java和C#都有类似的基本数据类型,如整数类型(int、long)、浮点数类型(float、double)、字符类型(char)、布尔类型(boolean)等。2、编程风格:Java和C#在一些语法细节和编程风格上有所不同,比如C#中属性(Properties)的语法更加简洁,而Java通常需要手动编写getter和setter方法。1、语法特征:尽管Java和C#都是C系列的语言,但它们的语法细节有一些差异,比如在声明变量时,C#使用var关键字推断类型,而Java需要显式指定类型。

金木AI 1998

C#基础

C#简介 C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。   C#是一种...

来日可期的博客 5万+

java和C#的基本语法区别

Java和C#在语法上非常相似,因为它们都源于C/C++家族,但作为不同公司(Sun/Oracle vs. Microsoft)为解决不同侧重点而设计的语言,也存在许多关键区别。C# 设计之初在借鉴Java的同时,更注重与Windows平台的深度集成、开发效率和生产力的提升(如引入属性、委托、后期移除受检异常),并随着.NET Core的诞生成为全平台语言。C#: 通常更早引入新特性,如 LINQ、var、Lambda、异步(async/await)、属性模式、记录类型(record)、顶级语句等。

全栈师的博客 615

C#调用托管C++类

由于C#编写的是托管代码,编译生成微软中间语言,而C++代码则编译生成本地机器码(这种C++也有叫做本地C++或者非托管C++,VC6.0就是用于开发非托管C++代码的平台),这两种语言进行混合编程就存在一定困难。比较常用的方法是使用DllImport的方法,这种方法在网上有很多介绍,这里就不详细叙述了。但是用过这种方法的人都知道这种方法对于导出函数还可以但是却没法导出非托管C++类!非常的要命。...

AI浩 7481

C#基础编程——简介及基础语法

C#基础编程——简介及基础语法 百科介绍 C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM

Box_sir的博客 2577

由C++转向C#:我们需要注意哪些方面的变化?

每隔10年左右,编程人员就需要花费大量的时间和精力去学习新的编程技术。在80年代是Unix和C,90年代是Windows和C++,现在又轮到了微软的.NETFramework和C#。尽管需要学习新的技术,但由此带来的好处却远高于付出的劳动。幸运的是,使用C#和.NET进行的大多数工程的分析和设计与在C++和Windows中没有本质的变化。在本篇文章中,我将介绍如何实现由C++到C#的飞跃。 已经有

5963

C#语言的语法

C#是一种功能强大且易于使用的编程语言,它的面向对象特性、高级的异常处理机制、灵活的集合和泛型支持、以及强大的LINQ和异步编程能力,使得开发者能够高效地构建各种类型的应用程序。无论你是初学者还是经验丰富的开发者,C#都能够为你提供工具和支持,帮助你实现各种复杂的编程任务。随着技术的不断发展,C#也在不断更新。未来,C#语言将会有更多的新特性和应用场景,值得我们持续关注和学习。希望本文对你理解C#的语法特性和实际应用有所帮助。

2501_90417020的博客 767
上一篇: 数组大小作为参数传递(通过模板数值参数)
下一篇: C++指向类成员函数的指针
梦之安魂曲
博客等级 码龄18年 81粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值