2010-12-08 7 views
1

いくつかのスタックでは、この種の比較をいくつかの関数で使用する必要があります。しかし、このプロトタイプがどのように見えるかわからないので、私は立ち往生しています。テンプレートクラスとオーバーロード '=='

私は関数内に次の行があります。

template <class T> 
void function1(T i) 
{ 
    if(i == 'a') 
     //do something 
} 

オーバーロードプロトタイプがどのように見えるのでしょうか。

EDIT 知らん、それは言及する価値がある場合は、とにかくこれは私がこれまで テンプレート

bool Stack<T>::operator==(char c) const 
{ 
    cout << c << endl; // just some test 
} 

私はまだそれを終えていないとして、この関数は、どのように機能するかをコメントする必要はありませんしようとしているものです。この部分はコンパイルされますが、この関数をStack :: push(T i)に初めて呼び出す部分ではコンパイルされます。コンパイラはこれに対応する関数がないと不平を言うでしょう。演算子をオーバーロードするため

error: no match for 'operator==' in 'i == '#'' 
+0

は、あなたがこれまで試したどのような私たちを表示する:私はあなたがしている何を言うことができませんその質問から尋ねるが、例が明確になるかもしれない。 –

+0

あなたの質問は明確ではありません。あなたのテンプレート関数は 'if'ステートメントが完了したときと同じようにうまくいきます。しかし、それは 'i == 'a''を比較できると仮定しています。いくつかの型 'T'のためにそれを可能にする方法や、' char'リテラルを使わないようにその行を一般化する方法についての質問ですか? – aschepler

+0

@aschepler:タイプTとキャラクターを比較できるようにしたいのですが、私がこのプログラムを実行するときのある点から、私はその比較を行う必要があります。 – starcorn

答えて

1

、関数の名前は、実際のオペレータが続くoperatorので、operator==。ブールを返します。私はあなたの議論があなたのコードに基づいているべきかどうかわかりません。おそらくStack<T>&であり、自由関数であれば比較するには2つ、メンバー関数であればこれと比較する必要があります。

Stack<T>に変換する方法がある場合は、左手側を変換できるように自由な関数を使用することをお勧めします。

0

ご質問が分かりません。テンプレート関数function1のインスタンス化が正常に行われるためには、とcharとを比較するoperator==を入力する必要があります。

  • は、例えば、あなたのタイプにbool operator==(char) constメンバ関数を提供します:

    struct A { 
        bool operator==(char) const { /* ... */ } 
    }; 
    
    
    function1(A()); // OK : comparison uses A::operator==(char) 
    
  • は、例えば、無料の関数としてbool operator==(const T &, char)を提供します

    は今、あなたはここで2つのオプションがあり

    struct A { /* ... */ }; 
    bool operator==(const A &, char) { /* ... */ } 
    
    
    function1(A()); // OK : comparison uses operator==(const A &, char) 
    
0

あなたのfunction1(t)のすべてのTは演算子==を実装する必要があります。例えば

、メンバ関数

class A 
{ 
public: 
    bool operator == (char) const; 
}; 

または非会員の演算子として:

class A 
{ 
public: 
    friend bool operator == (const A&, char); 
}; 
+0

私はすでにそれを試しました、それは私にコンパイルエラーを与えるでしょう。私はそのエラーで私の質問を編集しました – starcorn

+0

あなたが実際に試したことを言うのは難しいです。完全なコード断片がないので、誰もが推測しようとしています。このスレッドでは、関数1(T i)で使用されている型Tに対して演算子==(メンバ関数または空き)を指定する必要がありますが、可変でない限り、スタック<関数に渡される型の値。 –

関連する問題