2011-07-12 9 views
0

楕円(...)で異なるタイプのパラメータを渡すことはできますか?私はSQLクエリを作成する関数を書いています。ここでは、Ellipseを介してInsert文に値を追加したいのですが、私の値は異なる型です。C++の楕円へのパラメータ

答えて

2

警告の言葉として、これほど賢明ではないでください。私は同様の努力のために大きく苦しんでいません。 :))

Sqliteにはクエリービルダーが組み込まれており、最初にチェックします。彼らがあなたに任せないのは、おそらくあなたの問題であるテーブル名を指定することです。

boost::formatがこれに適しています。タイプセーフで、Cの可変引数のようにあなたにセグメンテーションする可能性は低いです。

std::string statement = boost::str( 
    boost::format("SELECT tab.* FROM %1% as tab") 
     % "my_table_name" 
); 

EDIT:

Sqliteをが独自に結合パラメータを処理し、あなたはそれのために任意の可変引数arumentsを必要はありません。

sqlite3_bind_* functionsにアクセスできます。

あなたはこのようなものを使用することがあります:

const char *sql = "INSERT INTO tab (a,b) VALUES (?1,?2);"; 
// create statement 
sqlite3_bind_int(stmt, 1, 43); 
sqlite3_bind_int(stmt, 2, 40000); 

これらのバインド機能は、あなたがチェックしなければならない戻り値を持って、私はあなたにそれを残しておきます。

+0

提案していただきありがとうございます。私の問題は、私はそれに問題がないので、私は1つのテーブルを持っている間、SQLのテーブルの列の値を指定することです。 具体的には、次のように私を助けてくれるものを探しています: 値に挿入(value1、value2、value3); 任意の数値と任意のタイプの値を取得する関数を作成するにはどうすればよいですか? – keeda

+0

@ddamaは、アンテストされた例で答えを更新しました。 –

+0

@ddama:私は、挿入用のSQL文を生成できるレコードおよびフィールドシステムを作成しました。レコードはField基本クラスへのポインタのベクトルです。 SQLのINSERT文を作成することは、各フィールドにその名前を尋ねるベクトルの反復処理の問題です。この手法では、テーブルに異なる値の型を持たせることができます。 –

1

可能です。パラメータの数と種類(printfのフォーマット文字列など)を決定するためのメカニズムが必要です。