1

オーバーロード関数について考えています。たとえば、さまざまな引数と出力(int、float double ecc ...)で関数を何度も定義せずに依存症を実行するより高速な方法ではないでしょうか。

よりわかりやすい:

// 2 ints addiction

int addic(int & a, int & b) {
  int c;
  c = a + b;
  return c;
}

// 1 int + 1 float

float addic(int & a, float & b) {
  float c;
  c = a + b;
  return c;
}

より速い方法ではありませんか?すべてのケースを定義する必要がありますか?

4

1 に答える 1

2

これは (コードの繰り返しを避けるため) テンプレートが存在する目的の 1 つです。例として使用した関数を実装する方法の例を次に示します (C++11):

#include <type_traits> // for std::common_type
template<class T1, class T2>
std::common_type<T1, T2>::type addic(const T1& a, const T2& b)
{
    return a + b;
}

T1関数に渡す最初の引数T2の型になり、2 番目の引数の型になります。

std::common_type<T1, T2>::typeT1 と T2 の両方を変換できる型です。たとえば、 afloatと anを追加するとint、タイプは になりますfloat

編集:ベクトルで何かをしたい場合は、次のようにすることができます:

template<class T>
void MyFunction(std::vector<T>& v)
{
    // do something with the vector v, for example:
    v.push_back(5);
}
于 2013-04-21T15:11:31.407 に答える