在我编写的大多数程序中std::vector,我的大部分痛苦都是转换
int offset=(int)v.size();
unsigned int offset=(unsigned int)v.size();
Run Code Online (Sandbox Code Playgroud)
令人遗憾的是,此类问题还反映在诸如此类的许多其他问题中。
有没有什么方法可以重新布线std::vector并强制它给出大小int或unsigned int类似的大小?
int offset=v.size_i();
Run Code Online (Sandbox Code Playgroud)
类型转换使代码变得更加混乱。不过,有些程序员很喜欢它们,并且觉得每次转换都没有问题。
c++14更优选解决方案,但c++17也欢迎解决方案。
如果有人建议更改变量的类型,那么迟早必须发生另一种类型转换。所以它并不能解决问题。
请考虑一下这些丑陋的短语
function((int)myvar1.vec[32].size(),(int)myvar2.vec[32].size());
Run Code Online (Sandbox Code Playgroud)
其中function仅接受ints。我无法控制它的定义。
您可以继承std::vector并重新实现size()函数以返回有符号值:
template<typename T, typename Alloc = std::allocator<T> >
class my_vector : public std::vector<T, Alloc>
{
using base_t = std::vector<T,Alloc>;
public:
using base_t::vector;
using base_t::operator =;
int size() const noexcept { return base_t::size(); }
};
Run Code Online (Sandbox Code Playgroud)