この問題の解決策を見つけるために検索しましたが、答えを見つけることができませんでした。私が抱えている問題は、コードのコンパイル中にインテリセンスが得られないことです。
テンプレートTでこのようなパラメーターを受け取っている(または変数を宣言している)場合:
unique_ptr<vector<unique_ptr<T>>> & dataSets;
intellisenseはdataSets.get()を検出しますが、dataSets.get()-> clear();を検出しません。ただし、実行すると正常にコンパイルされます。ただし、テンプレートでない場合は、正常に機能しているようです。
コード:
template <typename T>
void mtsql::MTMySQL<T>::executePrepareStatement(const string & sqlText,const unique_ptr<vector<SQLDataType>> & argList,unique_ptr<vector<unique_ptr<T>>> & dataSets)
{
dataSets.get()->clear();
unique_ptr<sql::ResultSet> rs;
for (auto iter = argList->cbegin(); iter != argList->cend() ; ++iter)
{
auto ps = this->createPreparedStatment(sqlText,args);
rs.reset(ps->execute());
dataSets.get()->insert(std::move(rs));
ps.release();
}
}
私はc++11を初めて使用するので、余分な手順や間違った手順を実行している可能性があります(たとえば、ps.release()は必要ないと思います...私のポイントはそれを削除することでしたが、スマートポイント)
助けてくれてありがとう!
編集1:助けのおかげで、私のコードははるかに見栄えが良く、リークの可能性はありません。ありがとうございました!
dataSets->clear();
for (auto iter = argList->cbegin(); iter != argList->cend() ; ++iter)
{
auto ps = this->createPreparedStatment(sqlText,args);
dataSets->push_back(std::move(rs));
}