考慮下面的代碼:比較參數包?擴展語法?
#include <utility>
class foo
{
private:
struct s
{
int value;
s* p2;
} *p;
public:
foo() : p(new s{ 0, nullptr }) {}
template<class... Args>
void fun(Args&&... val)
{
if (val > p->value) //point of interest
p->p2 = new s{ { std::forward<Args>(val)... }, nullptr };
}
};
int main()
{
foo o;
o.fun(34);
}
我怎麼會得到val > p->value
工作?我嘗試了val... > p->value
和{ val... } > p->value
之類的東西,但我似乎無法得到正確的語法。謝謝!
那是什麼做的(即,你要什麼條件實際上是)? –
也許你正在尋找一個更大的價值條件,或者任何價值更大?即相當於C++ 17'((val> p-> value)&& ...)'或'((val> p-> value)|| ...)'但是,你不能轉向一個參數包裝進'new s {{val1,new s {{val2,new s {{val3,...}}}}}}''如果這就是您要做的。 – chris
有一點需要考慮的是,從相同類型的參數包中構建'std :: list'很容易。 'std :: list {std :: forward (vals)...}'。這是因爲它有一個列表構造函數,通過該初始化列表的常規迭代初始化列表。也許你也可以這樣做。 –
chris