Bir yöntemin argümanı olarak bir std::function
kullanmak ve varsayılan değerini std::stoi
olarak ayarlamak istiyorum.std :: stoi varsayılan değer olarak std :: işlevi yöntem argümanı olarak nasıl oluşturulur?
no viable conversion from '<overloaded function type>' to 'std::function<int (const std::string &, size_t *, int)>'
Ben özel bir yöntem oluşturarak ekleyerek derlemek başardı:
void test(std::function<int(const std::string& str, size_t *pos , int base)> inFunc=std::stoi)
Ne yazık aşağıdaki hatayı alıyorum:
Aşağıdaki kod çalıştı.#include <functional>
#include <string>
int my_stoi(const std::string& s)
{
return std::stoi(s);
}
void test(std::function<int(const std::string&)> inFunc=my_stoi);
İlk sürümde sorun nedir? std::stoi
varsayılan değeri olarak kullanılabilir mi?
Neden typedf int (* fn) (const std :: string &, size_t *, int); fn f = std :: stoi; '? –
@CharlesPehlivanian: Sadece bir aşırı yük bu işlev tipine dönüştürülebildiğinden (bu, örneğin çalışmamdaki satırın neden işlediği). Ya std :: function 'şablon kurucusunun bir argümanı olabilir ve derleyicinin hangisinin geçerli olabileceğini görmek için şablon uzmanlıklarını başlatmasına izin verilmez. –
@MikeSeymour: açıklama için teşekkürler, böyle bir şey olduğunu düşünüyordum ama ne olduğunu anlayamadım. –