2009-09-07 24 views
8

C++クラス演算子を静的コンテキストでオーバーロードすることはできますか?例えばC++静的演算子オーバーロード

class Class_1{ ... } 
int main() 
{ 

    Class_1[val]... 

} 
+0

万一 'Class_1 [ヴァル]'利回りAに対して、op[]ためatのように、plus<a, b>をそのテンプレートを使用することができますタイプ?あなたは 'Class_1 [val] v;'をやると思いますか? –

+1

私はそれに積分値を与えようとしましたが、型は問題ありません。 – jameszhao00

+0

C++では、型システムで型を表現することはできません( 'std :: type_id'のみです)、静的に多重定義できる演算子は考えられません。私は、あなたの実装のアイデアがC++で実現可能かどうかを尋ねるのではなく、解決するための実際の問題を提示することをお勧めします。誰かが実現可能な実装を提案できる可能性があります。 – sbi

答えて

13

組み込み演算子を使用したメタプログラミングを探している場合:組み込み演算子はコンパイル時の値ではなく実行時の値で動作します。

あなたはそのためのboost::mplを使用し、代わりに、組み込みの演算子を使用しての、op+など

int main() { 
    using boost::mpl::vector; 
    using boost::mpl::at_c; 
    using boost::mpl::plus; 
    using boost::mpl::int_; 

    typedef vector<int, bool, char, float> Class_1; 
    typedef vector< int_<1>, int_<2> > Numeric_1; 

    at_c<Class_1, 0>::type six = 6; 
    typedef plus<at_c<Numeric_1, 0>::type 
       ,at_c<Numeric_1, 1>::type>::type r; 
    int i3[r::value] = { 4, 5, 6 }; 
    return ((i3[0] + i3[1] + i3[2]) * six) == 90; 
} 
3

あなたは、オペレータがクラスで動作を意味する場合は、意味がありませんいいえ、それはintまたはdoubleoperator +月演算子を言うようなものです。演算子は関数の構文上の砂糖であり、型ではなく変数(値)で動作します。

+1

'[]]のような演算子を使って、最も簡単な方法でアクセスしたい何らかのユーティリティクラス(静的メンバーのみ)を"自分自身 "にロードすると意味があります。 –

+1

もちろん、@ jave.webのコメントには、クラスの静的なスコープ*内にデータがある場合には、ケース*で意味をなけることができます。あなたの例のように、単純な算術ではなく、[]、()、<<, >>などのようなものは、複雑なマネージャクラスのどのような種類の場合でも完全な構文的砂糖かもしれませんシングルトンインスタンスを強制的に実行する必要はありません。 –

5

私はこの正面で間違っている可能性がありますが、私はそれが可能であるとは思わない。なぜ私はあなたがこれをしたいと思うか尋ねたいと思います。インスタンスではなくクラスに対して操作を実行するのではなく、アプリケーション全体で1つのインスタンスしか必要としないのでしょうか?この場合、おそらくthe singleton patternを使用しているはずです。

+1

私はマッドのようなシングルトンパターンを使用していましたが、シングルトンコードはテストを書くのが面倒なので停止しました。 – jameszhao00

1

いいえ、演算子をクラスの静的メンバーにすることはできません。代わりに通常の静的関数を使用してください。

関連する問題