【发布时间】:2021-09-25 17:04:41
【问题描述】:
不久前,我想编写一个可以返回指向类型的指针的类,该类型始终使用相同的参数进行初始化。由于这只返回指针,如果我想创建一个返回 A* 的对象,但生成 B*,它是 A 的子级,则不会有问题,因为 B* 可以转换为 A* .我想将这些存储在向量中,但我并不真正关心生成的类型是B 还是C,只关心它是A 的子类型。我想做类似的事情:
template<class RET_TYPE>
class Generator {
public:
template <class GEN_TYPE, class... Args> requires requires (Args...){
{ new GEN_TYPE(Args...) } -> std::convertible_to<RET_TYPE*>;
}
Generator (Args...) { /* Implementation */ }
RET_TYPE getObject() { /* Implementation */}
};
唯一的问题是,据我发现没有办法指定构造函数的模板参数。最后我使用了一种解决方法,但我没有找到一个很好的解释来解释为什么会这样。我找到的最详细的一个,谈到构造函数实际上并没有这样的名称,但如果这是唯一可以解决的问题,它肯定可以通过:Generator<class template><Constructor template>(),不是吗?我看到的问题是名称解析,但这应该不是问题,因为它是明确的。
【问题讨论】:
标签: c++ templates constructor template-argument-deduction