Về cơ bản tôi muốn loại phạm vi của mình được chuyển đổi hoàn toàn từ Range<const char>
thành Range<const unsigned char>
. std :: enable_if dường như không thể vì hàm không có đối số và không trả về. Whats làm việc xung quanh?làm cách nào tôi có thể sử dụng lệnh std :: enable_if trong toán tử chuyển đổi?
Đây là cơ bản những gì tôi đã cố gắng:
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);
}
};
tại sao không sử dụng 'std :: is_same <>' thay vì 'Loki :: IsSameType <>' ?? – Walter
Tôi lập trình trần kim loại trên vỏ não và ban đầu nó dễ dàng hơn để có được Loki làm việc, vì vậy điểm tốt và tôi đã thay đổi nó;) – odinthenerd
Bạn có thực sự cần một toán tử chuyển đổi không? Hoặc bạn có thể sống với 'operator =' và constructor? – Walter