gpt4 book ai didi

c++ - 根据调用的构造函数更改成员数

转载 作者:行者123 更新时间:2023-11-30 05:23:51 25 4
gpt4 key购买 nike

我需要一个模板类,它具有不同的成员,具体取决于调用的构造函数。我设法得到了一个类,它有不同的成员使用 sfinae 和一个基类(我几乎是这样做的 SFINAE on member variable )。现在我的问题是,我能否实现一个具有不同成员的模板类,具体取决于调用该类的哪个构造函数?也许有人可以知道如何实现这一目标。

编辑:我目前使用boost::variant,但问题是变体中最大的对象很大,而最小的只是一个指针。这是一个真正的性能问题,因为大多数时候指针会在变体中。

编辑 II:如果这可以与 ctor 一起工作,那就太棒了,但如果不行,工厂功能也可以。

编辑 III(或我正在努力实现的目标):我目前正在制作一个转换为 C++ 的 DSL。因为我试图使多态性成为可能,所以我只传递指向函数的指针。因为有些指针是引用计数的,有些指针是原始的,根据用户的需要,可以有同一类的共享指针和原始指针。这就是为什么我不能制作两个不同的类,因为如果在指针上调用一个函数,它应该是同一个函数,否则我必须重载所有函数,这会给我2**n 当函数有 n 个参数时函数。这就是为什么我要尝试创建一个类,它可以根据传递给构造函数的内容来表示原始指针或 shared_ptr。

最佳答案

您应该继续使用 variant<>但是不是将你的大类存储为一个对象,而是将它也存储为一个指针:

boost::variant<common_case*, huge_class*>

既然你说你通常存储一个指针,这不会花费你任何东西,并且回收 100% 的浪费内存,因为所有对象指针都是相同的大小。

关于c++ - 根据调用的构造函数更改成员数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com