根据调用的构造函数更改成员的数量

Change number of members depending on constructor called

本文关键字:成员 构造函数 调用      更新时间:2023-10-16

我需要一个模板类,它有不同的成员,这取决于调用哪个actor。我设法获得了一个类,它使用带有基类的sfinae具有不同的成员(我几乎像成员变量上的sfinae那样做)。现在我的问题是,我可以实现一个模板类,它有不同的成员,这取决于类的哪个部分被调用?也许有人能有办法做到这一点。

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

编辑二:如果这将工作与一个演员,这将是了不起的,但如果不是,一个工厂函数也可以工作。

编辑III(或我想要达到的):我目前正在制作一个DSL,它可以翻译成c++。由于我试图使多态性成为可能,所以我只向函数传递指针。因为有些指针是引用计数的,有些指针是原始指针,这取决于用户的需要,所以可以有同一个类的shared_pointer和原始指针。这就是为什么我不能创建两个不同的类,因为如果一个函数在指针上被调用,它应该是同一个函数,否则我必须重载所有的函数,这会给我当函数有n个参数时,2**n个函数。这就是为什么我要尝试创建一个类,它可以代表一个原始指针或shared_ptr,基于传递给actor的内容。

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

boost::variant<common_case*, huge_class*>

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