C++ 如何创建函数模板,以扩展不表示函数参数的参数包?
我很抱歉,但是我在标题的一句话中表达这个案例时遇到了一个大问题 问题是: 我有一个基于许多属性的类模板,不要把这个属性关键字太字面化:C++ 如何创建函数模板,以扩展不表示函数参数的参数包?,c++,variadic-templates,C++,Variadic Templates,我很抱歉,但是我在标题的一句话中表达这个案例时遇到了一个大问题 问题是: 我有一个基于许多属性的类模板,不要把这个属性关键字太字面化: template<typename ... P> class C: public P... {} 然后,我需要一个单独的、自由的函数模板,该模板包含两个实例,并对每个属性执行一些调用: template<typename ... P> void foo(C<P> &c1, C<P> &c2) {
template<typename ... P>
class C: public P... {}
然后,我需要一个单独的、自由的函数模板,该模板包含两个实例,并对每个属性执行一些调用:
template<typename ... P>
void foo(C<P> &c1, C<P> &c2)
{
{ doSomething<p>()... } // for each type p in pack P
}
template<typename T>
void doSomething() {}
问题是p并不代表一组我的函数参数。相反,它将参数化参数类型。所以我不知道如何写扩展。
这样的事情可能吗 在我看来,您只是缺少函数参数中的参数包扩展。然后还有一个小的输入错误p->p,您似乎打算使用折叠表达式对所有语法稍有不同的类型执行函数:
template<typename ... P>
void foo(C<P...> &c1, C<P...> &c2)
{
// Parentheses and comma required to signify fold expression using the comma operator
( doSomething<P>(), ... );
}
我还觉得你应该把c1和c2传递给doSomething,它可能应该把对象作为T&,我猜?,否则这个函数将只取决于类型,而不是那种类型的实际对象。我不清楚你想做什么。你能举个例子说明你想如何使用它吗?这能回答你的问题吗。这至少会给你一个想法,你可以做些什么。真的!非常感谢