derleme hatası tetikleyen minimal örnektir:Neden variadic şablon parametresinin bu ikamesi başarısız oluyor? (Paket önce sabit argümanlar)
#include <utility>
void foo(int, double, int)
{}
template <class... Args>
void post_forwarder(void(*fun)(Args..., int), Args&&... aArgs)
{
fun(std::forward<Args>(aArgs)..., 5);
}
int main()
{
post_forwarder(foo, 6, 6.1); // Compilation error on instantiation
return 0;
}
Sorunun variadic şablon parametresi sabit int parametresi önce fonksiyon tipinde genişletilir gerçeği ile ilgilidir şüpheli Ama durum böyleyse, bunun için iyi bir gerekçe bulamıyorum. Clang 3.6 bildirdiği
hatadır:
error: no matching function for call to 'post_forwarder'
note: candidate template ignored: failed template argument deduction
Hata gönderebilir misiniz? Bu yardımcı olur. – lodo
Bir kenara göre, "Args && ..." işlevinin beklenen bir işlev işaretçisine iletilmesiyle çıkarılan "Args ..." iyi bir plan değildir. Sadece bunu bildiğinden emin olmak için. – Yakk
@Yakk Kabul etmeliyim ki, yükselttiğiniz noktayla ilgili daha fazla ayrıntıyı kullanabilirim :) –