"Practical C++ Metaprogramming" adlı kitabı okudum ve derleyemediğim aşağıdaki örneğe sahibim. Bunu benim için halledebilir misin?Pratik C++ Metaprogramlama
template <typename F>
struct make_tuple_of_params;
template <typename Ret, typename... Args>
struct make_tuple_of_params<Ret (Args...)>
{
using type = std::tuple<Args...>;
};
template <typename F>
using make_tuple_of_params_t = typename make_tuple_of_params<F>::type;
template<typename F>
void some_magic_function(F callable)
{
make_tuple_of_params_t<F> tuple;
/*
... do something with arguments in tuple...
*/
}
int main()
{
some_magic_function([] (int, double, float) {});
}
Dediğim bir derleme hatası alıyorum: 'type' 'make_tuple_of_params' herhangi bir doğrudan veya dolaylı taban sınıfın bir üyesi değildir. Varsayılan yapı seçildiğinden beri SFINAE beklendiği gibi çalışmıyor gibi dikişler. Bunu nasıl düzeltirim?
Bir lambda tipi bir işlev türü değil. – aschepler
C++ 14'deki lambdaların, otomatik olarak parametreli olarak algılanabilen "auto" parametrelerine sahip olabileceğini unutmayın. Bu tür lambdalar için, tuple tipinizin benzer görünmesini ne bekliyorsunuz? –
Yukarıdaki SFINAE yok, sadece – Yakk