从我的类转换为int

Conversion from my class to int

本文关键字:int 转换 我的      更新时间:2023-10-16

我使用的是一个模板化的库,我不想修改它。即CImg。这个库主要用于处理简单类型的模板:float、double、int等。

在某种程度上,这个库确实做到了:

CImg<T>& fill(const T val) {
  if (is_empty()) return *this;
  if (val && sizeof(T)!=1) cimg_for(*this,ptrd,T) *ptrd = val;
  else std::memset(_data,(int)val,size()*sizeof(T));
  return *this;
}

现在,我想将这个库与一个更复杂的类一起用作模板参数。我的特定类是这样的,sizeof(T)!=1和大多数时候,fill函数将用我的类的正确operator=val正确地分配给每个元素。然而,当使用!val时,我想要一个转换运算符,它允许将我的类强制转换为int并生成一些值(例如,0将使上面的函数起作用)。

现在,我的程序并没有按照它说的那样编译:

error C2440: 'type cast' : cannot convert from 'const MyClass' to 'int'

在不修改上面的函数的情况下,如何创建一个允许(int)my_variable和类型为MyClassmy_variable合法的运算符?

使用用户定义的转换

int type;
explicit operator int()
{
   return type;
}

在这种情况下,您想要的可能是int转换运算符重载:

class A{
    public:
    explicit operator int() const{
        return 2;
    }
};

编辑:|我添加了显式转换,它应该使您的代码能够编译(至少是您向我们展示的方法),并且不会弄乱其他运算符,但它只在C++11之后才被允许,所以如果您使用的是较旧的编译器,它可能还不可用。