文字列 (実際にはシェーダー文字列です) の検索と置換を効率的に実行する方法が必要だったので、少し調べた結果、boost::replace_all を思いつきました。私の関数には、文字列とベクトルまたはペアが渡されます。各ペアは文字列のペアです。検索して文字列に置き換えます。この一連の置換を繰り返し、その過程で文字列を変更したいと考えています。これが私が思いついたものです:
void
Shader::Read(ShaderTypes type, std::string const & shader, std::vector<std::pair<std::string, std::string>> const & replace)
{
// Perform search and replace on input string.
std::string newShader = shader;
std::for_each(replace.begin(), replace.end(), [newShader](std::pair<std::string, std::string> const & pair) {
boost::replace_all(newShader, pair.first, pair.second);
});
// Create and compile shader.
Read(type, newShader);
}
今、これはコンパイルされません。ブーストから大量のエラーが発生します。ペアが const であることと関係があると思いますが、100% 確実ではありません。std::pair を手動で作成して replace_all を呼び出すと、うまくいきました。ただし、ラムダから到着する形式は好きではありません。
誰でも私を助けてもらえますか?