Tak więc projektuję rodzaj funkcji my_numeric_cast
, aby ograniczyć typy konwersji dostępnych podczas korzystania z architektury, którą piszę.SFINAE do szablonu podstawowego zawsze powoduje błąd
To było dość proste do zrobienia czegoś jak
template<typename To, typename From>
constexpr To my_numeric_cast(From);
template<>
constexpr float my_numeric_cast<float, int>(int i) { return i; }
który pracuje, umożliwiając odlewanie tylko od wskazówki do pływaków, gdy używany jest obsada. I generowanie błędu powiązania za każdym razem, gdy podjęto próbę rzucenia spoza białej listy.
Jednak naprawdę chciałbym uczynić ten błąd kompilacją, aby złapać nadużycie znacznie szybciej.
W jaki sposób ustawić prawidłową treść szablonu podstawowego, czy można się tego spodziewać podczas tworzenia instancji?
Dlaczego warto korzystać z szablonu? Możesz dodać przeciążenia i jeśli wywołają przeciążenie, które nie istnieje, jest to błąd kompilatora. – NathanOliver
@NathanOliver, Nie można przeładować na typ zwracany przez funkcję. Powoduje to często niejednoznaczność. – StoryTeller