从我的类转换为int

时间:2013-08-06 20:57:50

标签: c++ casting type-conversion

我正在使用一个模板化的库,我不想修改它。即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函数会正确地将val分配给每个元素,并使用我班级的operator=。但是,当!val时,我想要一个转换运算符,它允许将我的类转换为int并生成一些值(例如,0会使上面的函数工作)

现在,我的程序没有编译,因为它说:

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

如何创建一个允许(int)my_variable my_variable类型为MyClass的{​​{1}}合法的运算符,而不修改上述函数?

2 个答案:

答案 0 :(得分:4)

使用user defined conversions

这样的事情
int type;
explicit operator int()
{
   return type;
}

答案 1 :(得分:2)

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

class A{
    public:

    explicit operator int() const{
        return 2;
    }
};

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