2

私は多くの couts を持っているので、引数を 3 つだけ取ることができる関数を作成できるようにしたいと考えています。この関数は、cout が次のように行うのと同じように、それらを画面に出力します。

print( 5, " is a ", "number" );

// should do the same thing as

cout << 5 << " is a " << "number" << endl;

私は誰にもそれをするように頼んでいません。できる方法を探しているだけです。しかし、コードを提供できれば、それも良いでしょう。誰かアドバイスはありますか?ありがとう。

4

5 に答える 5

14
template <typename T0, typename T1, typename T2>
void print(T0 const& t0, T1 const& t1, T2 const& t2)
{
    std::cout << t0 << t1 << t2 << std::endl;
}
于 2012-07-16T20:37:30.430 に答える
5

引数が3つしかない関数を作りたい

本気ですか?C++11 は、それよりもはるかに強力です。

void print()
{
    std::cout << std::endl;
}

template<typename T, typename... Args>
void print(const T & val, Args&&... args)
{
    std::cout << val;
    print(args...);
}
于 2012-07-16T21:21:20.377 に答える
4

テンプレートでそれを行うことができます:

template<typename T, typename S, typename U>
print(T x, S y, U z)
{
    std::cout << x << y << z;
}

int編集:複雑な型( orだけでなく)を渡すことを期待している場合char *は、James の回答に従い、const参照を使用する必要があります。

于 2012-07-16T20:37:24.147 に答える
2

3 つのアイテムを印刷するという特定のタスクを単純化する場合は、#define マクロを使用して実行できます。

#define print(A,B,C) cout << (A) << (B) << (C) << endl

関数呼び出し構文を好む場合は、代わりに C スタイルの出力を使用することを検討してください。printfこれは、C++ 標準ライブラリの「ファーストクラスのメンバー」です。特定のアプリケーションで意味がある場合、それを避ける理由はありません。

printf("%d %s %s\n", 5, "is a", "number");

アプローチの利点はprintf、特定の数の引数に制限されないことです。

于 2012-07-16T20:38:07.370 に答える
2

あなたはマクロを使うことができます...(あなたがそれをしたいのであれば、時々醜いかもしれません)

#define PRINT(x,y,z) cout << (x) << (y) << (z) << endl;
于 2012-07-16T20:37:24.753 に答える