4

C++でメソッドをオーバーロードするのに問題があります。

typedef char int8_t;
class SomeClass{
public:
…
void Method(int8_t paramater);
void Method(char paramater);
};

は単なるエイリアスであるため、int8_tはtypedefでcharあるため、同じ型を参照している可能性があります。その場合、オーバーロードは機能しません。

それらを同時に動作させたいですか?同じ解決策を提案できますか。注:テンプレート化されたメソッドを追加したくありません。

エラーは次のとおりです。

エラー:SomeClass :: Method(char)の複数の宣言

4

3 に答える 3

5

フェイクタイプを使用してください。char構造体の1つまたは構造体にラップint8_tし、その構造体をパラメーターとして使用します。

于 2012-05-14T11:39:40.773 に答える
2

...それらは同じタイプを参照している可能性があり、その場合、オーバーロードは機能しません。それらを同時に動作させたいですか?

幸い、それは不可能です(を使用してもtemplates)。それはまさにその目的を殺すからtypedefです。
あなたがあなたのコードでこれをするつもりなら、それはコードの臭いです; デザインを変更する必要があるかもしれません。

于 2012-05-14T11:39:03.227 に答える
1

これを試すことで、ある程度の改善が得られる可能性があります。

void Method(char paramater);
void Method(signed char paramater);
void Method(unsigned char paramater);

実装がを定義しint8_t、定義がこれら3つのうちのいずれかに一致する場合、正しい関数が呼び出されます。

ただし、不正な実装は次のようなことを行う可能性があります。

typedef __special_secret_sauce int8_t;

次に、の別のオーバーロードを定義する必要がありますint8_tint8_tこれらの実装と競合するために別のオーバーロードを定義すると同時に、typedefint8_tをとして定義する実装に対してそれを定義しないのはかなり難しいですsigned char。他の誰かがそれは不可能でさえあると言いました。

int8_tまったく存在しない実装が存在する可能性があります。charの3つのバリエーションに対してオーバーロードを定義するだけであれば、問題はありません。

于 2012-05-15T07:34:58.923 に答える