Bir yakalama lambda'sını şablon parametresi olarak şablonlu işlev işaretçisi işlevine geçiremediğimi fark ediyor. Yanlış şekilde mi yapıyorum yoksa imkansız mı? f2
constexpr
olmadığı içinİşlev olarak işaretleme işleviyle şablon lambda olarak şablon parametresinin geçirilmesi
#include <iostream>
// Function templated by function pointer
template< void(*F)(int) >
void fun(int i)
{
F(i);
}
void f1(int i)
{
std::cout << i << std::endl;
}
int main()
{
void(*f2)(int) = [](int i) { std::cout << i << std::endl; };
fun<f1>(42); // THIS WORKS
f2(42); // THIS WORKS
fun<f2>(42); // THIS DOES NOT WORK (COMPILE-TIME ERROR) !!!
return 0;
}
'std :: function' işlevini kullanın. – 101010
f2, bir değişken çalışma zamanı parametresidir. Şablonlar, zaman parametreleri oluşturmayı gerektirir (sabitler ve tipler). Const eklemeyi deneyin, ancak muhtemelen işe yaramaz. – Hcorg