模板c++的模板?

2023-11-22

我已经成功地创建了一些 preperty 类,其中包含我们期望的所有内容。我的意思是,使用它时,您不需要仅使用来调用函数operator =将完成所有工作。但我想只有一件事如果我们能解决就好了:

template <class T, class X,void (T::*setFunc)(const X&),const X& (T::*getFunc)()const> class property
{ 
    T* const owner;
    X data;
    friend T;
    property(T*const  pOwner) : owner (pOwner)
    {
    }
public:
    property& operator = (const X& input){(owner->*setFunc)(input);return *this;}
    operator const X&()const {return (owner->*getFunc)();}
};

struct c
{
protected:
    void setInt(const int& data);
    const int& getInt() const;
public:
    c();
    property<c, int ,&setInt,&getInt> myInt;
};

c::c() : myInt(this)
{
}

void c::setInt(const int& data)
{
    myInt.data = data;
}
const int& c::getInt() const
{
    return myInt.data;
}

请参阅类属性有 4 个参数,第一个参数是类类型本身。我想知道我们是否可以做任何事情来从两个函数指针属性需求中提取类类型。类似的东西property <int, &setInt, &getInt> myInt;.

你知道有什么方法可以消除第一个模板参数吗?


如果您想省略显式指定类型参数, 下面的代码就可以达到目的。 不过这段代码需要VC2010。

template <class> struct class_type;
template <class C, class T> struct class_type< T(C::*) > { typedef C type; };

template <class> struct param_type;
template <class C, class T> struct param_type< void(C::*)(const T&) > {
    typedef T type;
};

template <class S, S setFunc, class G, G getFunc> struct property {
    typedef typename class_type<S>::type T;
    typedef typename param_type<S>::type X;
    T* const owner;
    X data;
    ....
};

#define PROPERTY(set, get) property<decltype(&set), &set, decltype(&get), &get>

struct c {
    void setInt(const int& data);
    const int& getInt() const;
    PROPERTY(setInt, getInt) myInt;
};

顺便说一下,MSVC 有自己的property。 如果能达到目的的话,可能会更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板c++的模板? 的相关文章

  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include

随机推荐

  • 获取所有元素的触发事件

    为了提供一些背景信息 我正在进行一项专注于数字营销和用户体验的研究 为了进行研究 我必须能够从 UI 中的每个组件获取事件日志 这样我就能够创建可用性模式的数据集 要在网络界面中执行此操作 例如使用 JavaScript 这非常简单 win
  • 关于将“uint8”转换为“int8”的困惑

    我想转换uint8 to int 所以我写了一个const0xfc 并尝试使用int8 0xfc 来转换它 但是代码会引发错误 package main import fmt func main a int8 0xfc compile er
  • 使用 underscore.js 过滤多维数组

    我有一个数组event称为的对象events Each event has markets 一个数组包含market对象 这里还有另一个数组叫做outcomes 包含outcome对象 我想使用 Underscore js 或其他方法来查找
  • 解码 json 并迭代 django 模板中的项目

    您好 我正在使用 simplejson 导入一些 json 然后解码以在 django 模板中使用 这是解码后的 json u ServerID 1 u Cache u CacheBusted False u FromCache True
  • 从远程服务器检索数十亿行?

    我正在尝试从远程 SQL Server 检索大约 2000 亿行 为了优化这一点 我将查询限制为仅使用索引列作为过滤器 并仅选择列的子集以使查询如下所示 SELECT ColA ColB ColC FROM
  • Spring Security 身份验证成功但密码错误

    我的 WebSecurity 配置如下所示 EnableWebSecurity Configuration public class WebSecurityConfiguration extends WebSecurityConfigure
  • MLflow:INVALID_PARAMETER_VALUE:模型注册表存储不支持 URI“./mlruns”

    当我尝试在模型注册表中注册模型时 出现此错误 有人可以帮助我吗 RestException INVALID PARAMETER VALUE Unsupported URI mlruns for model registry store Su
  • 文件对话框中设置的 tkinter 文件模式

    为了在文件对话框中获取具有给定扩展名的预期文件集 我在几个地方看到了这样的写入模式 label pattern 模式位于一个字符串中 然而以下不起作用 from tkinter import filedialog as fd fd asko
  • 需要带有背景图像的空 Div 来强制高度并且必须具有响应能力

    我需要以下内容 空 div 没有内容 背景图片设置到div中 背景图像在调整大小时流畅 响应灵敏 我无法设置固定 div 上的尺寸 我尝试的所有方法都无法强制打开 div 以支持背景图像的大小 任何帮助是极大的赞赏 http www eve
  • 如何在没有插件的情况下搜索选择标签html的选项

    我用 html 制作了选择标签 其中包含所有国家 地区的名称 我想使用搜索栏搜索它们的值 而不需要任何插件或附加组件 这可能吗 Answer 是的 您可以首先在此处查看它的实际效果demo 如果您喜欢所看到的内容 请执行以下操作 HTML
  • 充分使用“if”语句或“try/catch”块?

    给我一些你的想法 关于哪种是更好的编码实践 使代码更高效 看起来更漂亮 无论如何 增加和提高你使用 if 语句来预测和捕获潜在问题的能力 或者只是充分利用 try catch 假设这是针对 Java 的 如果重要的话 Edit 我目前正在摆
  • 自动为所有 SQL Server 作业创建脚本

    目前 我正在尝试为 MS SQL2005 服务器的所有 SQL 作业自动生成创建脚本 我发现的一种方法已经完成 手动http msdn microsoft com en us library ms191450 aspx 我发现第二种方法可以
  • 始终保留n个最佳元素的数据结构

    我需要一个始终保存n迄今为止插入的最大项目 排名不分先后 So if n是 3 我们可以进行以下会话 其中我插入一些数字并且容器的内容发生变化 now insert 1 1 now insert 0 1 0 now insert 4 1 0
  • 寻找 A* 算法的启发式有哪些好方法?

    您有一张方形图块地图 您可以在其中向 8 个方向中的任意方向移动 鉴于您有名为的函数cost tile1 tile2 它告诉您从一个相邻图块移动到另一个图块的成本 您如何找到既可接受又一致的启发式函数 h y goal 给定此设置 寻找启发
  • python 中的端口转发以允许套接字连接

    我使用套接字启动服务器并希望允许客户端连接到它 self sock bind 0 0 0 0 0 0 0 0 0 will allow all connections and port 0 gt os chooses a open port
  • 如何在不传递变量的情况下获取当前异常?

    我正在寻找一种方法来检索当前异常 而不必将其作为变量传递 假设下面的代码 public void MakeItFail try throw new FailException catch Yes I m aware that this sh
  • ng-grid 自动调整列宽

    我正在使用 AngularJS ng grid 并尝试制作它 1 根据列内容自动调整列宽 2 当显示的列较少时 使最后一列宽度自动调整大小以填充空白区域 例如 我有 8 列 每列宽度 100 整个 ng grid 宽度为 800 然后如果我
  • 查找消息的作者

    如果有人写 name arg 我希望我的机器人说消息的作者 你的名字是 arg 我找不到该消息的作者 though client command async def name their name await client say 0 yo
  • Elastic Search 上可以创建的索引数量有限制吗?

    我正在使用 AWS 提供的 Elastic Search 我的网站上以及每次注册时都有一个注册页面 为新用户创建一个新索引 稍后由他的工作组使用 这意味着索引的数量不断增长 现在达到大约 4 5k 我的问题是 索引数量有性能限制吗 为每个新
  • 模板c++的模板?

    我已经成功地创建了一些 preperty 类 其中包含我们期望的所有内容 我的意思是 使用它时 您不需要仅使用来调用函数operator 将完成所有工作 但我想只有一件事如果我们能解决就好了 template