【发布时间】:2016-12-22 21:03:36
【问题描述】:
我需要一个模板类,它有不同的成员,具体取决于调用的 ctor。 我设法得到了一个类,它有不同的成员使用 sfinae 和一个基类(我几乎像 SFINAE on member variable 那样做)。 现在我的问题是,我能否实现一个具有不同成员的单个模板类,具体取决于调用该类的哪个ctor? 也许有人可以知道如何实现这一目标。
编辑:我目前使用boost::variant,但问题是,变体中最大的对象很大,而最小的对象是指针。这是一个真正的性能问题,因为大多数时候指针都在变体中。
编辑二:如果这可以与 ctor 一起使用,那就太棒了,但如果不是,工厂功能也可以。
EDIT III(或我想要实现的目标): 我目前正在制作一个转换为 C++ 的 DSL。 因为我试图使多态成为可能,所以我只是将指针传递给函数。因为有些指针是引用计数的,有些指针是原始的,根据用户的需要,可以有 shared_pointers 和同一类的原始指针。这就是为什么我不能创建两个不同的类,因为如果在指针上调用一个函数,它应该是同一个函数,否则我必须重载所有函数,这会给我 2**n 个函数,当函数有 n 个参数时。 这就是为什么我试图创建一个类,它可以根据传递给 ctor 的内容来表示原始指针或 shared_ptr。
【问题讨论】:
-
它必须成为构造函数吗?可以改为工厂函数吗?
-
这看起来是个奇怪的想法……你到底想做什么?
-
@ildjarn:正是我的想法 :-) 创建一个按需交付对象的生成器/工厂。
-
如果工厂方法没问题,只需使用它:-)
-
@Exagon 如果您只管理原始指针和
shared_ptr,我看不出您的boost::variant中的“巨大”是什么?
标签: c++ templates c++11 c++14 sfinae