Temel olarak, aralık türünün Range<const char>
'dan Range<const unsigned char>
'a dönüştürülebilir olmasını istiyorum. std :: enable_if işlevi görünmez çünkü işlev hiçbir argüman almaz ve geri dönüşü yoktur. Ne iş var? İşteStd :: enable_if'i bir dönüşüm operatöründe nasıl kullanabilirim?
Denedim temelde ne:
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);
}
};
neden 'std :: is_same <>' '' Loki :: IsSameType <> 'yerine kullanılmıyor? – Walter
ARM kortekste çıplak metal programlama yapıyorum ve önce Loki'nin çalışmasını sağlamak daha kolaydı, bu yüzden iyi bir nokta ve ben değiştirdim;) – odinthenerd
Gerçekten bir dönüşüm operatörüne ihtiyacınız var mı? Veya operatör = 've kurucu ile yaşayabilir misiniz? – Walter