0

Der Fehler liegt daran, dass der Parser das zweite Vorlagenargument als enable_if_t<bits_count > nach einer zufälligen 8 sieht.Wie kann diese Bedingung in Template-Teilspezialisierung gesetzt werden?

Offensichtlich kann die Lösung dafür das Argument von enable_if_t zu bits_count >= 9 ersetzen, aber kann etwas getan werden, um den ursprünglichen Ausdruck zu bewahren, so dass es für zukünftige Leser Sinn machen wird?

Antwort

4

sollten Sie zusätzliche Klammern fügen Sie den Compiler zu erklären, was Sie meinen:

template<size_t bits_count> 
struct best_type<bits_count,enable_if_t<(bits_count > 8)>> { 
    typedef byte type; 
}; 
1

den Zustand Gesetzt in Klammern.

template<size_t bits_count, typename = std::enable_if_t<true>> 
struct best_type { 
}; 

template<size_t bits_count> 
struct best_type<bits_count, std::enable_if_t<(bits_count > 8)>> { 
    using type = byte; 
}; 

Beachten Sie auch, dass ich die void mit std::enable_if_t<true> ersetzt haben, da es mehr Sinn für den Leser macht.

Beachten Sie auch, dass es besser ist using Aliase zu verwenden (im Vergleich zu typedef s) in C++

+0

'void' klar. Die Benennung des Parameters 'Enabler' oder' AlwaysVoid' würde das Muster klarer machen. – Jarod42

Verwandte Themen