0

について学びましたstd::forward_as_tuple。私は自分のプロジェクトでこの技術を使用しています:

template<class... Ts>
tuple<Ts&&...> values(Ts&&... ts) // yes, values is renamed forward_as_tupe
{
    return tuple<Ts&&...>(std::forward<Ts>(ts)...)
}

class C_SQL { ...... }; // MySQL C API, SQL statement encapsulation
                        // operator% is well defined.

char pszname[32];
int  iage;

C_SQL sql;
sql % "insert into student (name,age,grade)"
    %  values(pszname, iage, 2 );

次に、MySQL C API のプリペアド ステートメント文字列を次のように取得できます。

"insert into student (name,age,grade) values(?, ?, 2 )"

「pszname」と「iage」は左辺値であるため、バインド変数です。2は右辺値であるため、SQL ステートメントのリテラルであることがわかります。

私の質問は:

タプルの要素が右辺値か左辺値かはどうすればわかりますか?

例えば:

int k;
tuple<int&, int&&> t = forward_as_tuple(k, 2);

最初の要素は左辺値参照、2 番目の要素は右辺値参照です。

それを伝えるには、C++ コードを使用してください。このコードは、varaidic テンプレート タプルを処理できます。

4

2 に答える 2