Fondamentalmente voglio che il mio tipo di intervallo sia implicitamente convertibile da Range<const char>
a Range<const unsigned char>
. std :: enable_if sembra impossibile perché la funzione non accetta argomenti e non ha alcun ritorno. Qual è il lavoro intorno?come posso usare std :: enable_if in un operatore di conversione?
Qui è fondamentalmente ciò che ho provato:
template<typename T>
class Range{
T* begin_;
T* end_;
public:
Range(T* begin,T* end):begin_{begin},end_{end}{}
template<int N>
Range(T (&a)[N]):begin_{static_cast<T*>(&a[0])},end_{static_cast<T*>(&a[N-1])}{}
T* Begin(){return begin_;}
T* End(){return end_;}
operator typename std::enable_if<std::is_same<T,const char>::value,Range<const unsigned char>&>::Type(){
return *reinterpret_cast<Range<const unsigned char>*>(this);
}
};
perché non utilizzare 'std :: is_same <>' invece di 'Loki :: IsSameType <>' ?? – Walter
Sto programmando bare metal su una corteccia ARM ed è stato più facile in un primo momento far funzionare Loki, quindi è stato un buon punto e l'ho cambiato;) – odinthenerd
Hai davvero bisogno di un operatore di conversione? O potresti vivere con 'operator =' e costruttore? – Walter