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、クラスを にキャストし、いくつかの値を生成できるようにする変換演算子が必要intです (たとえば、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 に答える