我在我的代码中发现了很多以下内容:
{
SomeClass<VisitorType> obj(visitor, param1, param2, 3, 4);
}
{
OtherClass<VisitorType> obj(visitor, 5, "six");
}
大括号是必要的,以确保对象的生命周期受到约束,工作在构造函数和析构函数(RAII 样式)中完成。这和这些类模板的其他用户所做的不仅仅是构造和破坏,这是有充分理由的。
是否有一个方便的习惯用法可以将其归结为函数调用之类的东西,在可能的情况下保留强类型?
例如
f<SomeClass>(visitor, param1, param2, 3, 4);
f<OtherClass>(visitor, 5, "six");
f<>()
类似的东西在哪里:
template <template <class> class C, class V>
void f(V &v, ...)
{
C<V> c(v, ...); // magic needed here
}
我尝试使用可变参数函数,但遇到了大量编译错误。如果可能的话,我宁愿不使用宏。谢谢!