1

vstgui 4.0 を使用して、vst プラグイン用の非常に単純な GUI を作成しようとしています。Visual Studio 2012 Express を使用しています。ビルドすると、sdk ファイルの 1 つからエラーが発生します。エラーは次のとおりです。

error C2664: 'std::make_pair' : cannot convert parameter 1 from 'const VSTGUI::CViewAttributeID' to 'VSTGUI::CViewAttributeID &&' c:\sdks\vst3 sdk\vstgui4\vstgui\lib\cview.cpp 691 1 VST

cview.cpp の「attributes.insert...」行から来ています。

bool CView::setAttribute (const CViewAttributeID id, const int32_t inSize, const void* inData)
{
    if (inData == 0 || inSize <= 0)
        return false;
    CViewAttributeConstIterator it = attributes.find (id);
    if (it != attributes.end ())
        it->second->updateData (inSize, inData);
    else
        attributes.insert (std::make_pair<CViewAttributeID, CViewAttributeEntry*> (id, new CViewAttributeEntry (inSize, inData)));
    return true;
}

これを修正するにはどうすればよいですか? このエラーを抑制する方法はありますか?

4

1 に答える 1

3

C++11 で誤って使用すると、重大な変更がありましたmake_pair。引数の型を指定すると、C++11 では C++03 とは異なる意味になります。

これを修正するには、std::make_pair引数の型を指定する をに変更し、std::pairそれ以外はそのままにしておきます。

make_pairまたは、基本的に型引数を渡してはならないため、型引数を に削除します。ただし、これにより、古いコードが奇妙なことを行っていた場合、動作が変わる可能性があります (上記の場合は安全だと思います)。

ただし、最初の解決策は、C++11 での C++03 の動作を模倣するため、何かおかしなことをした場合に備えて最も安全です。

std::make_pair彼らの後を追わず<>に、あなたは一人で去るべきです。

この重大な変更は、C++11 での完全な転送効率の向上とmove型のみのサポートに関連しています。

于 2013-12-29T02:32:12.777 に答える