Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建函数模板,以扩展不表示函数参数的参数包?_C++_Variadic Templates - Fatal编程技术网

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&,我猜?,否则这个函数将只取决于类型,而不是那种类型的实际对象。

我不清楚你想做什么。你能举个例子说明你想如何使用它吗?这能回答你的问题吗。这至少会给你一个想法,你可以做些什么。真的!非常感谢