基本的には、範囲タイプをRange<const char>
からRange<const unsigned char>
に暗黙的に変換できるようにします。 std :: enable_ifは不可能なようです。なぜなら、関数は引数をとりませんし、戻りもないからです。何が回避策ですか?ここで変換演算子でstd :: enable_ifを使用するにはどうすればよいですか?
は、私が試したものを基本的には次のとおりです。
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);
}
};
なぜ 'Loki :: IsSameType <>'の代わりに 'std :: is_same <>'を使用しないのですか? – Walter
私はARMの皮質にベアメタルをプログラミングしています。最初はLokiを動作させるのが簡単でしたので、良い点と私はそれを変更しました;) – odinthenerd
本当に変換演算子が必要ですか?あるいは 'operator ='とコンストラクタで生きていけますか? – Walter