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

更改其类型后丢失对std::variant对象的引用

在C++编程语言中,std::variant是一个通用联合类型,它可以存储不同类型的值。然而,当我们改变std::variant对象的类型后,如果之前的类型与新的类型不匹配,就会丢失对std::variant对象的引用。

当我们创建一个std::variant对象时,它可以持有多个不同的类型。我们可以使用std::visit函数来访问std::variant对象中当前持有的值。然而,当我们试图更改std::variant对象的类型时,情况就变得复杂了。

在尝试更改std::variant对象的类型之前,我们需要确保当前的类型与要更改的类型匹配。否则,我们会丢失对std::variant对象的引用。

例如,假设我们有一个std::variant<int, float, std::string>对象:

std::variant<int, float, std::string> var = 10; 如果我们尝试将其类型更改为std::string,那么一切都正常:

var = std::string("Hello"); 在这种情况下,我们没有丢失对std::variant对象的引用,因为std::variant对象仍然持有一个std::string类型的值。

然而,如果我们尝试将其类型更改为double,那么问题就出现了:

var = 3.14; // 错误!类型不匹配 由于当前持有的值是std::string类型,而不是double类型,所以我们无法将其更改为double类型。这将导致对std::variant对象的引用丢失。

解决这个问题的一种方法是使用std::get函数来获取std::variant对象中当前持有的值,并在更改类型之前将其保存到临时变量中。然后,我们可以使用std::variant的emplace函数来更改类型并将之前保存的值重新存储回去。这样可以避免丢失对std::variant对象的引用。

例如,我们可以这样做:

std::string oldValue = std::get<std::string>(var); // 获取当前持有的值 var.emplace<double>(3.14); // 更改类型为double var = oldValue; // 将之前保存的值重新存储回去 通过这种方式,我们可以在更改std::variant对象的类型后仍然保留对其引用。

在腾讯云的产品中,没有直接与std::variant相关的产品或服务。然而,腾讯云提供了丰富的云计算和云服务解决方案,如虚拟机、云存储、人工智能、区块链等,可以满足各种需求。您可以访问腾讯云的官方网站(https://cloud.tencent.com/)了解更多信息。

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

相关·内容

  • matinal:SAP 详细解析成本收集器

    成本收集器作为成本对象,主要应用于按期间进行成本核算的情况,在这种情况下会把产品创建为成本收集器,实际成本的收集和差异的结算全部按照成本收集器进行处理,财务的成本分析也针对成本收集器进行。 成本收集器是按期间核算,生产订单可以按期间也可以完全结算,也就是per和full。 一.在创建生产成本收集器之前,为什么要先创建标准成本估算? cost collector是用于Repetitive Manufacturing的,平时生产不开production order,等产成品出来才使用MFBF倒冲原材料. Cost collector会收集target cost和actual cost并且比较两者差异,所谓的target cost 就是标准成本, 产成品的标准成本包括料(从Production version带出,一般对应到一个BOM,其实就是当你使用CK11N估算时那时所有原料的单价和数量之和, 如果物料主数据或BOM有scrap,这个也会算上, 如果BOM component有group,会根据一定的百分比算出),工(activity type的作业价格,一般对应到生产人员工资), 费(一般指各种制造费用),那时的三者之和就作为当期计划成本(目标成本) . 通常会使用CK24 update到产成品主数据,就是标准成本 二.在更改工艺路线的工作中心后,再进行倒冲,但是作业类型所带的成本还是会到原来的工作中心带的成本中心去。如果我将原来的标准评估删除后,对原来已经倒冲的凭证进行reverse的话,则会提示“没有可以用的工序”。标准成本评估与时间有关系吗? 更改工艺路线的工作中心后, 类型所带的成本还是会到原来的工作中心带的成本中心去,Why? 首先你使用Ck84_99看下,CK11N后会记录当时所有原料的价格,MAF 和LAB价格(从routing的工作中心带出). 从SAP底层分析下结果.使用CK11N后,首先产生一7开头的内部订单,SE16在ONR00 table中可找到OR0000007XXXXX,所有的内部订单都在此,.然后CKIS会记录下料工费在你估算时的价格和数量(Ck84_99). KKF6N看到的total tgt就是抓这儿的数据,我们知道KKF6N产生的差异不过是数量差异和价格差异, 然后CK11N和KKF6N还会在KEKO表中记下两比记录.通常从routing里得到的LAB和MAF是内部自动产生的, 价格记录在表 COSS中, 查看时在内部订单前一定要加前缀OR0000007XXXXX, 原料实际消耗在MSEG(物料凭证表中),也可看COSP(CO凭证表它们是一致的).KEKO和AUFK是通过prod. process number关联, CKIS和KEKO是通过cost estimate no关联的. 生产总差异=标准数量*标准价格-实际数量和实际价格 所以你在更改工作中心后,只要CKIS的数据没变当然还抓原来的,你必须使用CK11N重新计算,而且这动作不是随便做的,一般在月结后下月开始在估算,否则当月差异………….,还有通常你在当月使用CK11N会提示物料主数据已经有td cost , 你必须删除它, 这时才会生效 如果将原来的标准评估删除后,CKIS和KEKO的那边当期的cost variant是标准成本变式的东东没了(cost collector是PREM),当然MFBF或Reverse会不成功(MFBF时要求一定要有标准成本). 三.另外如果SAP这样设置都按照标准成本评估的工艺路线和BOM来下线倒冲,而不是按照新的已经更改过的routing和BOM来倒冲的话,这样的逻辑应该怎样解释? 你更改过routing或者BOM后,除非:1,你C223另做生产版本再为它create a cost collector. 2 .CKR1原来的std cost就是update CKIS 和KEKO 记录,再CK11N否则当然永远是抓原来的数据 上面的逻辑我想应该很清楚了, 我曾写过这方面的报表,从数据库这层研究过cost collector的流程, 还碰到一个问题,就是使用KKBC_PKO, KKBC_ORD(对cost collecot, 实际上和KKF6N) ,就是如果cost collector一年都在使用,但是每月都在变动产成品的std cost, 看报表出现比如11.1号如10月没结算target cost在11.1号那时出现不了,结算后才OK , 后来找到了notes 540376打了补丁OK . 问题在于,如果我看整年的cumulated total tgt cost, 到底是使用当月的target cost* total qty , 还是每月的target cost * monthly total

    01
    领券