Cで書かれたSQLライブラリの周りにC++ 11ラッパーを実装しようとしています.Cライブラリには、列インデックスを必要とするSQL文から別のデータ型を取得するための別の関数があります。単純なアプローチは以下のプロトタイプですが、重大な欠陥があります。引数の実行順序に依存します。これは安全ではありません(コンパイラエラーがあり、テストしていない可能性があります)。可変テンプレートの展開でintをインクリメントする安全な方法は何ですか?
質問:バリデーションテンプレートの展開で変数を安全にインクリメントするプラットフォームに依存しない方法は何ですか?
template< typename... ColumnTypes >
void SQLStatement::execute(std::function< void(ColumnTypes...) > rowCallback){
while(this->nextRow()){
int column = 0;
rowCallback(this->getColumn<ColumnTypes>(column++)...);
// unreliable increment^
}
}
template< typename T >
T SQLStatement::getColumn(const int columnIdx){}
template<>
inline int SQLStatement::getColumn<int>(const int columnIdx){
return sql_library_column_int(this->nativeHandle, columnIdx);
}
// Other getColumn specializations here...
毎回カラムをゼロに設定しています。 – jthill
@jthill:行から値を抽出するときに、各行でゼロを再計算します。 –
参照を取り、その参照をインクリメントして古い値を返す単純な関数を作るのはなぜですか? –