Aşağıdaki kodu derlerken:şablon sınıfından genel std :: işlev üyesini arayamaz
#include <functional>
template <typename functionSignature>
class Class
{
std::function<functionSignature> func;
public:
Class(const std::function<functionSignature>& arg) : func(arg) {}
void callFunc() { func(); }
};
void f(const int i) {}
int main()
{
Class<void(const int)> a(std::bind(f, 10));
a.callFunc();
return 0;
}
VS 2015 derleyici altıncı satırında aşağıdaki hata iletisini oluşturur: Şimdi
error C2064: term does not evaluate to a function taking 0 arguments.
, Bunun, derleyicinin functionSignature
'un bir işlev imzası olmadığını düşündüğüne inanıyorum; Örnekleme yaptığımda aynı hata oluşur ve örneğin, , std::function<int()>
yerine birnumaralı telefondan aramayı deneyin.
Şablon bağımsız değişkeninin her zaman bir işlev imzası olacağından nasıl emin olabilirim, böylece 'u std::function
numaralı telefondan arayabilir miyim?
template <typename F>
class Class;
template<typename R, typename... P>
class Class<R(P...)> {
public:
std::function<R(P...)> func;
void callFunc(P... p) { func(p...); }
};
kısmi uzmanlaşma kolayca istediğiniz türü tanımlayabilirsiniz bu şekilde kullanarak:
için serseri hattını değiştirmek? – Jts
Evet, gerçek bir MCVE yardımcı olur. Sadece bir '' '' '' '' 'class'ın bir örneğini 'Class
Yakk