![](/img/trans.png)
[英]Can I use something like enable_if with an implicit conversion operator?
[英]how can I use std::enable_if in a conversion operator?
基本上我希望我的范围类型可以从Range<const char>
隐式转换为Range<const unsigned char>
。 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);
}
};
使其成为一个模板,其默认参数默认为T - 这是将类型推导推迟到函数实例化的点,否则SFINAE 不起作用 。 然后在另一个参数的默认值中进行所需的检查。
template<
typename U = T,
typename = typename std::enable_if< std::is_same<U,const char>::value >::type
>
operator Range<const unsigned char>() {
return *reinterpret_cast<Range<const unsigned char>*>(this);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.