2

我正在使用一个模板化的库,我不想修改它。即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,我想要一个转换运算符,它允许将我的类强制转换为 anint并产生一些值(例如,0将使上面的函数工作)。

现在,我的程序没有像它所说的那样编译:

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

如何在不修改上述函数的情况下创建一个允许(int)my_variablewithmy_variable类型合法的运算符?MyClass

4

2 回答 2

5

像这样使用用户定义的转换

int type;
explicit operator int()
{
   return type;
}
于 2013-08-06T21:06:01.740 回答
3

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

class A{
    public:

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

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

于 2013-08-06T21:08:20.450 回答