如何创建 function-template,扩展 parameter-pack 不代表函数参数?

How to create function-template, that expands parameter-pack which doesn't represent function argument(s)?

抱歉,我用标题的一句话表达案例有很大问题

问题: 我有一个基于许多 "properties" 的 class 模板(不要把这个 "property" 关键字看得太字面意思):

template<typename ... P>
class C: public P... {}

然后我想要单独的、自由的函数模板,它有两个实例并为每个实例执行一些调用 "property":

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 不代表我的一组函数参数。相反,它参数化参数类型。所以我不知道怎么写"expansion"。 这样的事情可能吗?

在我看来,您只是缺少函数参数中的参数包扩展。然后还有一个小错字(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>(), ... ); 
}

我还觉得你想将 c1c2 传递给 doSomething(我猜这可能应该将对象视为 T&? ),否则该函数将仅取决于类型,而不是该类型的实际对象。