C で記述された SQL ライブラリに C++11 ラッパーを実装しようとしています。C ライブラリには、列インデックスを必要とする SQL ステートメントからさまざまなデータ型を取得するための個別の関数があります。以下に単純なアプローチのプロトタイプを示しますが、重大な欠陥があります。引数の実行順序に依存しているため、安全ではありません (コンパイル エラーが発生する可能性もあり、テストしていません)。
質問:可変個引数テンプレート展開で変数を安全にインクリメントするプラットフォームに依存しない方法は何ですか?
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...