2

ここに関数があります

template <typename T> T sum(T *x, T *y)
{
    T z(0);
    z=*x+*y;
    return z;
}

現在テンプレートを勉強中です。

メインサブルーチンでやろうとしていることは次のとおりです。

int i(1), j(2);
long p(12), q(3);

std::cout<<sum(&i,&j)<<" is the output\n";
std::cout<<sum(&((long)i),&q)<<" is the second output\n";

ビット合計 (&((long)i),&q) が機能していません。long 型の別の変数に値を入れずに、変数 i を使用して関数を呼び出すことができる方法はありますか? 私がテンプレートを書いた方法では、両方のパラメーターが同じ型である関数が生成されることを理解できます。2 つの異なる型を持つパラメーターの関数を生成するようにすることは、それほど難しいことではないと思います。これは別の方法だと思います。

4

1 に答える 1

2

関数でポインターを使用しないでくださいsum。ここでそれらを使用しても意味がありません。パラメータは関数本体内で変更されないため、const 参照を使用できます。

template <typename T> 
T sum(const T &x, const T &y)
{
    T z(0);
    z=x + y;
    return z;
}

異なる型の 2 つの引数を使用して関数を呼び出すと、コンパイラはテンプレート引数の型を推測できません。したがって、どちらが必要かを明示的に示す必要があります。

std::cout << sum<long>(i, q) << std::endl;

パラメータの 1 つをキャストすることもできます。その場合、コンパイラは型を推測できます。

std::cout << sum(static_cast<long>(i), q) << std::endl;
于 2013-05-01T22:16:58.570 に答える