クラスがあるとします:
template <class Type>
class A
{
public:
void function1(float a, Type b);
void function1(float a, float b);
};
次のようにクラスをインスタンス化します。
A<int> a;
このクラスには、次のパラメータを持つ 2 つのオーバーロードされた関数があります: (float a, int b); (フロート a、フロート b);
しかし、次のようにクラスをインスタンス化すると:
A<float> a;
コンパイルエラーが発生します:
メンバー関数が再宣言されました。
そのため、Type のタイプによっては、コンパイラに次のような関数を定義させたくない (または望まない) ようにします。
template <class Type>
class A
{
public:
void function1(float a, Type b);
#if Type != float
void function1(float a, float b);
#endif
};
しかし、もちろん、上記の構文は機能しません。そのようなタスクを C++ で実行することは可能ですか? 可能であれば、例を挙げてください。