当大多数特定模板参数不重要时,是否存在编写函数的快捷方式,该函数将模板化类作为参数?
给出
template<typename A, typename B, typename C, typename D, typename E>
class Foo
我想写
template<typename A>
int metric(Foo<A> x, Foo<A> y)
在这种情况下,模板参数B到E是无关紧要的。有没有办法避免写作
template<typename A, typename B, typename C, typename D, typename E>
int metric(Foo<A, B, C, D, E> x, Foo<A, B, C, D, E> y)
参数B到E有默认值,但我希望度量标准适用于所有实例化,而不仅仅是那些使用默认值B到E的实例。
答案 0 :(得分:4)
template<class A, class...Ts,class...Us>
int metric(Foo<A, Ts...> x, Foo<A, Us...> y)
这允许两种Foo
类型不同。如果你只想要相同:
template<class A, class...Ts>
int metric(Foo<A, Ts...> x, Foo<A, Ts...> y)
答案 1 :(得分:0)
尝试可变参数模板:
template<typename A, typename ... others>
int metric(Foo<A, others...> x, Foo<A, others...> y)
对于此声明,有多少模板参数并且它们的类型是什么并不重要。唯一的限制是x
和y
都必须使用相同的类型集进行实例化。如果不需要此限制,请参阅Yakk的答案。如果需要,它还允许您编写部分特化。
答案 2 :(得分:0)
也许您可以将指标声明为
template<typename T>
int metric(T x, T y)
然后模板参数扣除应该起作用:
Foo< whatever parameters > f,g;
int x = metric(f,g); // no need to specify parameters again