1

3 つの要素をソートするテンプレート関数を実行しようとしています。numbers
(int, double) は正常に動作しますが、文字列は期待どおりに動作しません。

#include <cstdlib>
#include <algorithm>
#include <iostream>

using namespace std;

template<typename TYPE>
void sort3(TYPE n1, TYPE n2, TYPE n3) {
    TYPE arr[3];
    arr[0] = n1;
    arr[1] = n2;
    arr[2] = n3;
    sort(arr, arr + 3);

    for (int i = 0; i < 3; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main(int argc, char** argv) {
    sort3("B", "Z", "A");
    sort3(10.2, 99.0, 1.9);
    sort3(200, 50, 1);
    return 0;
}

次の出力が得られます。

AZB

1.9 10.2 99

1 50 200

私の理解でsort3("B", "Z", "A");は、オンラインコンパイラA B Z
で同じ結果が得られるため、OS固有ではないことがわかり ます。

4

3 に答える 3

1

sort3 の呼び出しを続けconst char*たい場合は、「専用の」テンプレートを追加できます。

template<>
void sort3(const char* n1, const char* n2,const char* n3) {
    sort3( string(n1), string(n2), string(n3));
}

これ sort3("B", "Z", "A"); でも動作します。

しかし、あなたの質問「そこで何が起こっているのですか?」Andy Prowl によって既に回答されています。

于 2013-04-21T14:43:09.150 に答える