Czy można napisać funkcję jako:
void func(uint64_t val) {template <typename T>
Void call_with(std::function
Int main() { auto print = [](int x) { std::cout << x; }; call_with(drukuj, 42); }}
Gdzie generowany jest błąd czasu kompilacji, jeśli jest on wywoływany z innym typem liczby całkowitej niż uint64_t
, bez modyfikowania moich ostrzeżeń #pragma
?
To znaczy:
uint32_t x = 0;
func(x) {…} // Error!
func(uint64_t(x)) {…} // Succes!
2 odpowiedzi
Przeciąż funkcję szablonem funkcji. Szablon funkcji będzie lepszym dopasowaniem dla wszystkich typów argumentów z wyjątkiem uint64_t
. Możesz zdefiniować szablon funkcji, aby w przypadku użycia powodował błąd.
void func(uint64_t val) { ... }
template <typename T>
void func(T)
{
static_assert(false, "argument type is not uint64_t");
}
W C++11 możesz użyć następującego szablonu:
template <typename T>
void func(T&&) = delete;
To zadziała:
template< typename T >
void func( T param );
template<>
void func<uint64_t>( uint64_t param )
{
}
Otrzymasz błąd konsolidatora (wystarczająco blisko). Przykład: http://ideone.com/5ft4F
Podobne pytania
Powiązane pytania
Nowe pytania
c++
C ++ to język programowania ogólnego przeznaczenia. Pierwotnie został zaprojektowany jako rozszerzenie C i ma podobną składnię, ale teraz jest to zupełnie inny język. Użyj tego tagu w przypadku pytań dotyczących kodu (który ma zostać) skompilowany za pomocą kompilatora C ++. Użyj znacznika specyficznego dla wersji w przypadku pytań związanych z określoną wersją standardu [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] lub [C ++ 23] itp. .