首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

由于常量引用,使用`hana::is_valid`失败

常量引用是指在声明变量时使用const关键字,将变量声明为只读的。常量引用可以用来引用常量值,也可以用来引用非常量值,但是通过常量引用无法修改被引用的值。

hana::is_valid是一个用于检查是否存在某个成员函数或成员变量的元函数。它接受一个函数或成员变量作为参数,并返回一个std::integral_constant类型的值,表示是否存在该成员。

然而,由于常量引用的特性,hana::is_valid无法正确地检查常量引用所引用的对象是否具有某个成员。这是因为常量引用只能访问对象的常量成员,而hana::is_valid需要访问对象的非常量成员。

解决这个问题的方法是使用std::remove_const模板来移除常量修饰符,将常量引用转换为非常量引用,然后再使用hana::is_valid进行检查。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <boost/hana.hpp>

struct Foo {
    void bar() {}
};

int main() {
    const Foo foo;
    auto is_bar_valid = boost::hana::is_valid([](auto&& obj) -> decltype(obj.bar()) {});
    std::cout << is_bar_valid(foo) << std::endl;  // 输出0,表示不存在bar成员

    auto is_bar_valid2 = boost::hana::is_valid([](auto&& obj) -> decltype(obj.bar()) {});
    std::cout << is_bar_valid2(const_cast<Foo&>(foo)) << std::endl;  // 输出1,表示存在bar成员

    return 0;
}

在上述代码中,我们首先定义了一个结构体Foo,其中包含一个成员函数bar。然后,我们声明了一个常量引用foo,并尝试使用hana::is_valid检查foo是否具有bar成员。由于foo是常量引用,hana::is_valid无法正确检查,返回0表示不存在bar成员。

接下来,我们使用std::remove_const模板将foo转换为非常量引用,并再次使用hana::is_valid进行检查。这次返回1,表示存在bar成员。

总结:由于常量引用的特性,使用hana::is_valid检查常量引用所引用的对象的成员会失败。需要使用std::remove_const模板将常量引用转换为非常量引用,然后再进行检查。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【第七篇】SAP HANA XS使用Data Services查询CDS实体【一】

    正文部分 使用SAP HANA XS数据服务(XSDS)库来查询CDS实体,类似于JavaScript对象一样。...CDS是什么,请参考另一篇文章,链接如下,或者直接去SAP官网看介绍 点击进入:SAP HANA XS CDS简介 由于时间关系,不过多介绍概念内容,直接说过程 导入XS DS库并通过变量引用它。...1、导入XS DS库并通过变量引用它。 ​ var XSDS = $.import("sap.hana.xs.libs.dbutils", "xsds"); ​ 2、导入要查询的CDS实体。 ​...使用$ execute方法运行查询 ​ var result = qOrders.$execute(); ​ 6、指定查询应返回的字段。...使用$ project()方法创建一个查询,该查询指定查询应返回的字段。 ​ var qOrderAndItemTitles = qOrders.

    42520

    【SAP HANA系列】SAP HANA XS使用Data Services查询CDS实体【一】

    正文部分 使用SAP HANA XS数据服务(XSDS)库来查询CDS实体,类似于JavaScript对象一样。...CDS是什么,请参考另一篇文章,链接如下,或者直接去SAP官网看介绍 点击进入:SAP HANA XS CDS简介 由于时间关系,不过多介绍概念内容,直接说过程 导入XS DS库并通过变量引用它。...1、导入XS DS库并通过变量引用它。 ​ var XSDS = $.import("sap.hana.xs.libs.dbutils", "xsds"); ​ 2、导入要查询的CDS实体。 ​...使用$ execute方法运行查询 ​ var result = qOrders.$execute(); ​ 6、指定查询应返回的字段。...使用$ project()方法创建一个查询,该查询指定查询应返回的字段。 ​ var qOrderAndItemTitles = qOrders.

    85530

    【SAP HANA系列】SAP HANA XS的JavaScript API详解

    正文部分 SAP HANA XS使用服务器端JavaScript API SAP HANA扩展应用程序服务(SAP HANA XS)提供了一组服务器端JavaScript应用程序编程接口(API),可配置应用程序与...例如,可以使用数据库API从应用程序内部调用SQL语句,或使用请求处理API访问SAP HANA数据的当前HTTP请求的详细信息.AP HANA XS包含以下服务器端JavaScript API集:Database...由于$ .hdb和$ .db API使用不同的数据库连接,因此避免在单个http请求中使用这两个API,例如更新相同的表,可能会导致死锁等等等这样的问题。..., 9, 'CHOCOLATE'); connection.commit(); ​ 以下SAP HANA XS数据库API的使用示例显示了如何建立与SAP HANA的连接并从指定的过程调用返回结果集。...xscron: "* * * * * */10 0", parameter: { a: "c" } }); myjob.schedules.delete({id: id}); ​ 如果URI中引用

    73520

    【第六篇】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

    例如,在SAP HANA存储过程使用一个表作为输入参数和一个表作为输出参数,使用XS Procedures可以传递给该存储过程的JavaScript对象(或一组对象)。...要使用存储过程作为XS JavaScript函数,需要执行以下步骤: 使用引用现有表的参数调用过程,如果要将表作为参数传递而不是JavaScript对象,则必须在调用语句中指定表的名称(作为字符串)以及...以下示例显示如何引用表rating_table: ​ getRating('schema.rating_table', 3); ​ SAP HANA数据库能够实现存储过程调用的结果,也就是说,使用WITH...返回的值不是本身,而是对已写入结果的表的引用。...getRating(rating, 3, '', conn); ​ 返回的引用指向全局临时表,可以使用相同的连接查询存储过程结果。

    74010

    【SAP HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

    从SAP HANA XS服务器端JavaScript(XSJS)调用存储过程,并使用JavaScript处理调用的结果。...例如,在SAP HANA存储过程使用一个表作为输入参数和一个表作为输出参数,使用XS Procedures可以传递给该存储过程的JavaScript对象(或一组对象)。...要使用存储过程作为XS JavaScript函数,需要执行以下步骤: 使用引用现有表的参数调用过程,如果要将表作为参数传递而不是JavaScript对象,则必须在调用语句中指定表的名称(作为字符串)以及...以下示例显示如何引用表rating_table: ​ getRating('schema.rating_table', 3); ​ SAP HANA数据库能够实现存储过程调用的结果,也就是说,使用WITH...getRating(rating, 3, '', conn); ​ 返回的引用指向全局临时表,可以使用相同的连接查询存储过程结果。

    98850

    通过RFC调用NetWeaver,让HANA数据库操作更可靠

    (创建到HANA的ODBC数据源) 配置完成后,我们就可以像操作其他数据库一样,对 SAP HANA的数据进行读写了。回到活字格里面,我们使用"连接到外联表"功能,引入HANA中需要操作的所有数据表。...(通过RFC + NetWeaver操作HANA) 步骤一:使用C#开发调用NetWeaver的RFC桥 在这一步中,我们需要使用到Visual Studio(截屏是VS2021)、活字格服务端编程接口...包(活字格服务端编程接口需要依赖这个包);最后引用活字格服务器程序安装目录中的GrapeCity.Forguncy.ServerApi.dll。...(存储在数据库中的NetWeaver连接信息) 在需要操作SAP的数据时,我们需要先使用"设置变量命令",从数据库中读取当前环境所使用HANA数据库的参数,拼接成连接字符串;然后使用"发送HTTP请求命令...如需使用这个工程,可以从码云获取:https://gitee.com/GrapeCity/lowcode_demo_hana_via_sap_rfc (使用活字格集成SAP HANA的效果) 讨论 为了帮助开发者做二次开发

    1.5K20

    SAP S4 HANA新变化-主数据:业务伙伴之前台操作

    The (mandatory) target approach in S/4HANA is the Business Partner approach....Transaction not available inSAP S/4HANA on-premiseedition 1511 FD01, FD02, FD03, FD05, FD06, FD0FK01,...3、客户分类:客户分类将不能再使用,菜单已变灰。 ?...4、发现的问题 联系人 ECC:在客户主数据一般视图中创建联系人,在销售视图的合作伙伴的联系人中可以引用过去,放到客户主数据合作伙伴中 HANA:联系人通过BP创建人员,但是不能在客户主数据的合作伙伴的联系人中引用...,不清楚SAP在这一块是怎么设计的; 销售员 ECC:销售员在HR中通过PA30创建员工主数据,在客户主数据的销售视图的合作伙伴销售员中; HANA:销售员在HR中通过PA30创建员工主数据,但是不能在客户主数据的合作伙伴的销售员中引用

    2K80

    许可证问题不解决 HANA依然难顶SAP半边天

    原本SAP将所有的赌注都押宝在HANA身上,可是这也没有逃脱Orace死缠烂打,前两个月Oracle还公开挑衅SAP【为什么SAP云使用了Oracle数据库而不是SAP HANA?】...1)Oracle Database In-Memory选件兼容所有应用,无需重新编写应用,而HANA需要重新编写; 2)使用Oracle数据库的应用运行速度比SAP HANA快2倍; 可见Oracle...并不想SAP HANA成功,一旦HANA在企业中被认可就会大批用户放弃原来使用的Oracle数据库,SAP押宝HANA也是毒丸计划,就是在日渐颓势的企业级软件市场找到新的潜增点,那么我们再来看看用户的接受度会如何呢...许可证问题也是摆在通往S/4HANA路上的一块主要绊脚石(S/4HANA是SAP今年早些时候公布的基于HANA的企业套件)。...最后, 该报告发现,SAP HANA的云平台仍在努力地吸引用户的眼球:仅有14%的受访者试过该平台,DSAG(德语SAP用户群)在几个月前也有类似的结果。

    1.2K100

    【SAP HANA系列】SAP HANA XS使用服务器JavaScript Libraries详解

    正文部分 上一篇我们讲了SAP HANA XS JavaScript的安全事项,这一篇讲一下JavaScript的资源库使用。...为了实现程序元素的重用,SAP HANA扩展应用程序服务支持服务器端JavaScript库。...标准的JavaScript限制适用于在创建的XSJS库的名称或库部署的包的名称中使用的字符。比如:不能在XSJS库的名称中使用连字符( - ),或者引用库,则应用程序包路径中的包名称。...为了防止在SAP HANA存储库中激活对象的问题,必须按照名称访问JavaScript属性对象的标准规则。 ...JavaScript库是内部开发的SAP HANA扩展。 这些库存在于包的上下文中,在导入库时引用它。 JavaScript库的以下示例显示单词“Hello”以及名称和感叹号作为后缀。 ​

    69230

    《深入理解Java虚拟机》读书笔记(六)–虚拟机类加载机制(上)

    常量在编译阶段会存入调用类的常量池,本质上没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化:如果一个类A引用了另一个类B的常量,那么经过编译阶段的常量传播优化,已经将此常量存储到了A类的常量池中...,以后A类对B类的该常量引用实际上都被转换为了A类对自身常量池的引用。...,先对他们所使用的的符号引用进行解析。...所以虚拟机可以选在在类被加载时就对常量池中的符号引用进行解析,也可以在一个符号引用将要被使用前才去解析。...否则,查找失败,抛出NoSuchMethodError。 最后如果成功返回了引用,将会对这个方法进行权限验证,如果权限验证失败,抛出IllegalAccessError异常。

    50720
    领券