Bir parametre paketini, tipik index_sequence & tuple numarasını kullanmadan ilk N - 1 ve Nth parametrelerine bölmek istiyorum ancak kafamı sarmış görünmüyor Çevresinde, yine de yapılabilir olması gerektiğinden eminim? (son öğeyi almak, özyineleme ile yeterince kolaydır).0 ... N-1 ve Nth öğesinde parametre paketini bölme
aramaya son işlev
void Fun(Foo a, Bar b);
benziyor ve bir sırayla variadic birinden elde edilir:
template< class... T >
Foo CalcFoo(T... args);
Benim şu anki uygulama:
//get the last item of the pack
template< class T >
T split_last(T t){ return t; }
template< class... T >
T split_last(T, T... t){ return split_last(t...); }
//helper
template< class... T, size_t... Indices >
Foo CalcFoo(const std::tuple<T...>& args, index_sequence<Indices...>)
{
return CalcFoo(std::get<Indices>(args)...);
}
//split and call
template< class... T >
void MoreFun(T... args)
{
//make a tuple containing all, then get n -1 items out of it
const auto tup = std::make_tuple<T...>(args...);
Fun(CalcFoo(tup, make_index_sequence< sizeof...(T) - 1 >()),
split_last(args...));
}
güncelleme Bunu yapmaksızın nasıl yapılacağını bilmek istemek dışında Sadece bir iyilik için onu da sordum, çünkü bir şekilde bir tupenin başa çıkacağını düşündüm. Böylece, her zaman olduğu gibi, bir kez daha doğru olduğu ortaya çıkan, erken optimizasyon mantralarını görmezden geliyoruz. VS2013 ile serbest bırakma modunda derlenmiş hem benim hem Horstling'in kodu tam aynı montaj kodunu verir. CalcFoo
dahil olmak üzere her şey, Fun
numaralı çağrıya kadar numaralandırılmıştır. Başka bir deyişle: tuple tamamen gitti. Bu yüzden muhtemelen yine de bu uygulama ile uğraşacağım çünkü oldukça açık.
+1 Bu gerçekten de yaratıcı! – stijn