二つ目の提示コードですがstd::shared_ptr<std::vector<std::shared_ptr<CharacterString>>>
のイテレーターで提示コード二つ目のコメント名部のstd::shared_ptr<CharacterString> it = *itr;
の一行がもどかしいのですがこれは一行で書く方法はないのでしょうか?
コメント部のコードのようにしたいです。
cpp
1 2 //文字構造体 3 struct Character 4 { 5 unsigned int textureID; //グリフのテクスチャID 6 glm::ivec2 size; //グリフサイズ 7 glm::ivec2 bearing; //グリフのベースライン 8 unsigned int advance; //次のグリフまでのオフセット 9 wchar_t character; //文字 10 }; 11 12 //文字列構造体 13 struct CharacterString 14 { 15 std::vector<Character> text; //文字列 16 glm::vec4 color; //描画色 17 glm::lowp_i16vec2 textSize; //文字列のサイズ 18 unsigned short pixelSize; //ピクセルサイズ 19 std::string fontName; //フォント名 20 FT_Face face; //フェイス 21 }; 22 23 std::shared_ptr<std::vector<std::shared_ptr<CharacterString>>> characterText; //描画文字
cpp
1 2// ##################################### デストラクタ ##################################### 3FrameWork::Text::~Text() 4{ 5 glBindVertexArray(0); 6 glBindBuffer(GL_ARRAY_BUFFER, 0); 7 glDeleteVertexArrays(1, &vao); 8 glDeleteBuffers(1, &vbo); 9 10 //グリフ解放 11 for (std::vector<std::shared_ptr<CharacterString>>::iterator itr = characterText->begin(); itr != characterText->end(); itr++) 12 { 13/////////////////////////////////////////////////////////////// 14 std::shared_ptr<CharacterString> it = *itr; 15 FT_Done_Face(*itr->face); 16 //FT_Done_Face(it->face); 17///////////////////////////////////////////////////////////// 18 } 19 20 21 FT_Done_FreeType(ft); 22} 23 24 25
> std::shared_ptr<CharacterString> it = *itr;
> FT_Done_Face(*itr->face);
これが現状のコードで
> //FT_Done_Face(it->face);
これが希望のコードということで、本当に間違いないですか?
現状のコードで未使用のitをわざわざ定義している意味が分かりません。
ではどうすればいいのでしょうか?どうしないとコンパイルエラーになるので仕方なく書いたのですが?
現状のコードがこちらで、
> std::shared_ptr<CharacterString> it = *itr;
> FT_Done_Face(it->face);
希望のコードがこちらではないかという指摘です。
> //FT_Done_Face(*itr->face);
これなら、現状のコードが二行で希望のコードが一行なので、意味が分かります。
> これなら、現状のコードが二行で希望のコードが一行なので、意味が分かります。
とはどいう意味でしょうか?もう少し詳細によろしいでしょうか?
分かりづらいようなので、聞き方を変えます。
質問からすると、現状のコードは以下で、これであればコンパイルが通ることになります。
> std::shared_ptr<CharacterString> it = *itr;
> FT_Done_Face(*itr->face);
しかし、このコードをコンパイルできるなら、一行目を消してもコンパイルが通るはずです。
そうなると、「これは一行で書く方法はないのでしょうか?」という質問の答えは、「一行目を消せばよい」になってしまいます。
本当にこのコードでコンパイルが通るのですか。
https://teratail.com/questions/341915 こちらの質問が参考になるかと思います。
回答2件
あなたの回答
tips
プレビュー