2016-05-04 6 views
-2

パラメータをとる変換演算子を定義する方法はありますか?私は(アルファをドロップすることによって)に/ HSBとRGB色から変換演算子を持っている、とRGBへのRGBAパラメータを持つC++変換演算子

class RGBColor 
{ 
    operator RGBAColor (const float alpha = 1.0) const noexcept; 
} 

が、私はにRGBから変換する難しさを抱えている:ここで

は私のユースケースであります私はalphaをパラメータとして供給する必要があるからです(常にデフォルトにするのではなく)。

私は私のようなものにフォールバックする必要がありますするつもりだと仮定します。しかし

RGBAColor ToRGBAColor (const float alpha = 1.0) const noexcept; 

、私は、標準C++の変換を使用することを好むので、使用するにはどのような方法があるかどう私は思ったんだけどパラメータをとる変換演算子。

+0

コンストラクタがをArものです。 –

+0

変換演算子は追加の引数を取ることができません。あなたはそれをどのように供給しますか?あなたの変換関数、OTOHは、私にはうまく見えます。 – 5gon12eder

+0

@IntellectualKitty述べたように、 'RGBAColor(のconstてRGBColor&RGB、フロートアルファ= 1.0)' –

答えて

1

キャストオペレータに追加のパラメータを渡す方法はありません。構文はそれを許さない。コメントで、その他の回答で述べたように

、代わりに適切なコンストラクタを提供します。

struct RGB { 
    float r_; 
    float g_; 
    float b_; 
}; 

struct RGBA : RGB { 
    float alpha_; 

    RGBA(const RGB& rgb) : RGB(rgb), alpha_(1.0) {} 
    RGBA(const RGB& rgb, float alpha) : RGB(rgb), alpha_(alpha) {} // <<<< 
    RGBA& operator=(const RGB& rgb) { 
     *static_cast<RGB*>(this) = rgb; 
     alpha_ = 1.0; 
     return *this; 
    } 
}; 
+0

@IntellectualKittyあなたはそれの左側に表示される大きなチェックマークをクリックして回答を受け入れることができます。あなたはそれを述べるためにあなた自身の答えを書く必要はありません。 –

4

これはコンストラクタがのためにあるものを文字通りです。

宣言し、1を定義します。

+0

[ビットを肉付け(http://stackoverflow.com/a/37040394/1413395)、批評を期待。 –

+0

@IntellectualKitty:あなたは、そのことをするために作られたもの以外の機能を使って何かをする方法を尋ねています。変換演算子はパラメータを取ることができますか?もちろん可能です。それ以外の場合は何が変換されますか?しかし、丸い穴に四角いペグを押し込もうとしています。どうして? _ "私はあなたのコードを捨てるのを避けたいです。" _あなたのコードを捨てないでください。 'RGBAColor(oldColor、someAlphaValue)'のように呼ばれて、コンストラクタ、または新しい 'RGBAColor'(:;それが値で返すことを明確に悪い名前の警告)を返すメンバ関数' oldColor.changeAlpha(someAlphaValueを) '書きます。 –

関連する問題