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

怎样做网站 网页前端开发培训机构推荐

怎样做网站 网页,前端开发培训机构推荐,友情链接添加在网站中有什么用,天津西青区旅游景点大全Property在C中的实现与应用 以下是在C中实现属性(Property)的完整实现方案&#xff0c;结合模板技术和运算符重载实现类型安全的属性访问&#xff0c;支持独立模块化封装&#xff1a; #include <iostream> #include <functional>template<typename HostType, t…

Property在C++中的实现与应用

以下是在C++中实现属性(Property)的完整实现方案,结合模板技术和运算符重载实现类型安全的属性访问,支持独立模块化封装:

#include <iostream>
#include <functional>template<typename HostType, typename ValueType>
class Property {using Getter = ValueType (HostType::*)() const;using Setter = void (HostType::*)(const ValueType&);HostType* host;Getter getter;Setter setter;public:Property(HostType* h, Getter g, Setter s = nullptr): host(h), getter(g), setter(s) {}// 读取属性值运算符重载 operator ValueType() const {if (!getter) throw std::logic_error("Getter not defined");return (host->*getter)();}// 赋值运算符重载 ValueType operator=(const ValueType& value) {if (!setter) throw std::logic_error("Setter not defined");(host->*setter)(value);return value;}// 只读属性特化 class ReadOnly {Getter getter;const HostType* host;public:ReadOnly(const HostType* h, Getter g) : host(h), getter(g) {}operator ValueType() const { return (host->*getter)(); }};// 重载 << 运算符friend std::ostream& operator<<(std::ostream& os, const Property& prop) {os << static_cast<ValueType>(prop);return os;}// 重载 << 运算符(只读属性)friend std::ostream& operator<<(std::ostream& os, const ReadOnly& prop) {os << static_cast<ValueType>(prop);return os;}
};
#include "Property.h"/* 使用示例 */
class User {std::string name_;int age_;// 私有访问方法 std::string get_name() const { return name_; }void set_name(const std::string& val) { name_ = val; }int get_age() const { return age_; }public:// 公开属性定义 Property<User, std::string> Name{this, &User::get_name,&User::set_name };Property<User, int>::ReadOnly Age{this,&User::get_age };User(const std::string& name, int age) : name_(name), age_(age) {}
};int main() {User user("zhengtianzuo", 18);// 属性赋值 user.Name = "zhengtianzuo";// 属性读取 std::cout << "Name: " << user.Name << std::endl;std::cout << "Age: " << user.Age << std::endl;// user.Age = 20; // 编译错误(只读属性)return 0;
}

实现原理分析

  • 模板类设计:
    Property模板类封装宿主对象指针、getter/setter方法指针
    通过HostType模板参数实现与宿主类的解耦
    使用嵌套类ReadOnly实现只读属性特化
  • 运算符重载:
    operator ValueType()实现属性值的隐式转换(读取操作)
    operator=重载实现属性赋值操作
    通过函数指针调用实际存取方法
  • 类型安全检查:
    getter/setter必须匹配宿主类和值类型
    只读属性禁用赋值运算符(编译期检查)

关键特性

  • 访问控制:
    通过setter存在性判断实现读写/只读控制
    支持自定义存取逻辑(如数据校验)
  • 性能优化:
    零运行时开销(编译期绑定)
    不依赖虚函数或动态类型检查
  • 模块独立性:
    属性实现与业务逻辑完全解耦
    可复用至任意需要属性特征的类

扩展应用场景

// 数据校验示例 
class Temperature {double celsius_;double get_c() const { return celsius_; }void set_c(double val) { if(val < -273.15) throw std::range_error("Below absolute zero");celsius_ = val;}public:Property<Temperature, double> Celsius{this, &Temperature::get_c, &Temperature::set_c};
};// 派生类支持 
class Animal {
protected:virtual std::string sound() const = 0;
};class Dog : public Animal {std::string sound() const override { return "Woof"; }
public:Property<Dog, std::string> Sound{this, &Dog::sound};
};

该实现方案完整实现了C++中的属性特征,通过模板技术和运算符重载提供了类型安全、高性能的属性访问机制,可作为独立模块集成到各类项目中。

完整代码

Github

作者郑天佐
邮箱zhengtianzuo06@163.com
主页http://www.zhengtianzuo.com
githubhttps://github.com/zhengtianzuo
http://www.zhongyajixie.com/news/51970.html

相关文章:

  • ps怎样做网站首页图网站关键词排名如何提升
  • 网站域名所有权 查询一个新手如何推销产品
  • 分类目录网站大全做seo太原搜索排名提升
  • 做网站和做网页一样吗小说网站排名
  • 做网站前没建images文件夹西安今天出大事
  • 网站优化目标seo优化名词解释
  • 东莞网站建设制作免费咨steam交易链接在哪复制
  • 网站建设调查百度提问
  • 主机网站建设制作深圳最新疫情
  • 做网站租服务器百度网站登录入口
  • 重庆建设工程证照查询网站seo优化易下拉排名
  • 做音乐网站要求百度优化服务
  • 建设公司网站费用多少百度网盘官网入口
  • 漳州招商局规划建设局网站站长之家ip查询工具
  • 新闻网站跟贴怎么做佛山网站定制
  • 佳能网站建设需求报告查权重工具
  • wordpress如何发邮件网站seo是什么意思
  • 怎么配置网站服务器佛山网络推广培训
  • 网站域名已经解析但没有被百度等搜索引擎收录怎么办东莞全网营销推广
  • 二维码 wordpressseo研究中心
  • 濮阳机械设备企业网站建设深圳疫情最新消息
  • 免费企业网站如何建立自己的网站
  • 响应式网站的研究意义品牌策划ppt案例
  • 西藏自治区住房和城乡建设部网站怎么做好公司官网推广
  • 网页网站制作培训班qq引流推广软件免费
  • 珠海舒讯网站建设如何在百度上添加自己的店铺
  • 东莞网站seo优化托管什么平台可以推销自己的产品
  • 消防电气火灾监控系统网站开发打开全网搜索
  • 湖南做网站 磐石网络引领企业网站设计规范
  • 自己电脑做网站空间沈阳疫情最新消息