Zasadniczo chcę, aby mój typ zakresu był niejawnie wymienialny z Range<const char>
na Range<const unsigned char>
. std :: enable_if wydaje się niemożliwe, ponieważ funkcja nie przyjmuje argumentów i nie ma zwrotu. Co to za praca?Jak mogę użyć std :: enable_if w operatorze konwersji?
Oto zasadzie co starałem:
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);
}
};
dlaczego nie używać 'std :: is_same <>' zamiast 'Loki :: IsSameType <>' ?? – Walter
Programuję bare metal w kamerze ARM i początkowo łatwiej było działać Loki, więc dobrze trafiłem i zmieniłem to;) – odinthenerd
Czy naprawdę potrzebujesz operatora konwersji? Czy mógłbyś mieszkać z 'operator =' i konstruktorem? – Walter