堕天使の煉獄
2016-05
28
01:21:24
よくわからんかんじ
うーん。
一応QT5.6のMinGWは…gcc4.9.1? 4.9.2じゃないのかな。古い情報なのかもしれないけど。とにかく、そこそこc++14にも対応してるわけなのですが。
いかんせん、IDEであるQT Creatorがc++14対応がまだ不完全なようで。
もうvc++ではとっくに使えていたような物がうまく動かない(インテリセンスが効かない)
auto data = SmfFile::Open();
data->ここでインテリセンス効かずに候補が出ない。
std::shared_ptr<SmfData> data = SmfFile::Open();
data->だと出る。
と、もはやauto使うのが常套になってるので不便極まりない。
for(const auto& v : data->track_list()){
v->これもインテリセンス効かない。
}
QTには、独自のforeach文があったりするのだけども、いまではもうvc++とかとコードの共有考えると普通にstdのrange-based forを使うのが好ましいのだけども。
困ったことに上記の場合、要素がstd::mapのとき、firstやsecondすら出てくれ無かったりして。
せっかくautoでさっくり書けるのに、インテリセンス効かせるために型名書くのも面倒&型が変更されたときにコードの書き換えが必要と、利便性も悪いコードになってしまう。
かといってインテリセンス効かないのもめんどくさい……。
一時はc++は進歩が停滞していたので、QTは独自の拡張で一歩リードしていた感じだったのだけども、ここに来て急激に革新的な進歩を遂げはじめたc++に、今度はQTが置いてきぼりを食っちゃってる感じぽ。
んで、vc++の方でもそういう話が出てきてるのですが、QTでもコードモデルにclangを採用ってな話があって。
んでもQT Creatorのオプションの所にclangコードモデルを使用するっていうチェックボックスがあるのは気にはなってたんですよね。
でも、なぜかグレー表示で、使用するにチェック出来ない状態で。
何か別途で入れなきゃ行けないのかなーとか思ってたんですが。でもclangのコードモデル適応したら、上記の型推論(auto)周りでもインテリセンス使える用になるのでわ?
とおもって、ちょっとググってみたら……。
メニューの「ヘルプ」→「プラグインについて」の所から、プラグインの一覧がでて。そこでclangのコードモデルのプラグインの所にチェックを入れてQT Creator再起動。
したらグレーになってたclangコードモデル使用するのチェックボックスがチェック可能になるという。
なぜデフォルトでないのかというと、clangコードモデル使用すると、コードの解析やエラー検出&エラー文字なんかは秀逸なのだけども、その分遅いってのと、なんかclangコードモデル使うと良く落ちる……みたいな記事もあったりして。
まだまだ安定した機能ではないっぽい?
が、とりあえずオンにしてみたらば。
おお、autoからのインテリセンス効くようになってるぅ!
これはもう、使わないとやってられないだろ……とかおもったんですけど。
SFINAEでよく使うstd::enable_if_tがclangコードモデルだと定義されてないとかエラーになるんですよね。
vc++だとstd::enable_if_tは
namespace std{
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
}
とすでに用意されていて、QTでも(gccでもというべきか)用意されているようで、特に問題無くビルド出来ていたんだけども。(clangコードモデル適用前ではSFINAEのところで下線エラーになってたけどw この辺のコードはvc++で使ってたコードの移植なので、コンパイラの対応はvc++のが遅れてるけど、コードモデルの対応はvc++のが進んでたと言う感じなのかなぁ。ああややこしい)
ていうかclangはコードモデル使うだけでコンパイラとして使うわけではないのでclangコードモデルとしてのエラー表示はでるけど、ビルドは出来る状態なので、それほどこまりはしないのだけども、エラーの赤いのがでるのは気持ち悪い。
うーん。でもなんか、clangコードモデルを使用するのチェックボックスのしたに、オプション指定するところがあるのだけども。その中にc++98とかの文字がはいってたりして。
なんかこれ、ここでもc++14とかのオプション指定がいるんじゃないのかな。
QTのほうも、プロジェクトファイルに
CONFIG +=c++14
とかオプション必要だったりするので。
が、そもそもこのオプションの所。
とか-Wno何とかって感じのがずらっとならんでるんだけど、Wnoってなんぞや?
……Warning no の略っぽい??
うーん。
ここにコマンドラインオプション書くらしいんだけど……。
-std=c++14
とか?
と試しに書いて見たらば、std::enable_if_tのところのエラーが消えた……。
-std=c++1z
vc++の現行のサポート範囲を越えちゃいそうだけど、こっちの指定のがよさげかな。
てか、これでうまくいってるのかよくわからん。
全然ドキュメントが見あたらないので。それっぽいところは英語ページばっかだし……。
地味にenum classで内部型指定するとき
enum class EventState : quint8{
...
}
この型指定の部分上の例だとquint8の部分がハイライタ効いてなかったんだけど、clangコードモデル適応したらハイライトついたりして。
んでもenum classてc++11のそれもかなり早い時期に出てたような機能だとおもうんだけど。
コレすら対応してないQT Creatorのc++11以降の対応はかなり遅れてるんだなぁというのが今更ながらに。
ほんのちょっと前までは、QTではSTLをあんまし使わないで、とくにコンテナ周りなんかはQTで用意されてるものをつかう感じだったのだけども(qtのコンテナ類はstlのよりも基本性能が良かったりもして)
ここ最近はすっかりc++11以降の書き方が馴染んでしまって、QTのコンテナ系だとemplace系がなかったりするので、今回のように、midiの1イベントを1オブジェクトとか扱う場合、数千、数万のオブジェクトを生成するので、、生成→コピーは無駄がおおい。
生成と同時に挿入できるemplace使わないと精神衛生上気持ち悪い……となって、結局QObjectをリストに入れて使う様な時のみQTのコンテナ使って、それ以外の単純なデータではstlのコンテナを使う形になったりして。
コンテナ操作系も、QTで用意されてるのよりはstlのアルゴリズム系とか使った方が、vc++に戻ったときに混乱少ないし……と、むしろQT独自の部分をstlの共通コードに置き換えていく感じの運用の方向に進んでいったりと、なんだかQTでのコーディングスタイルもいろいろ変わっちゃったかんじぽ。
進歩の停滞してたc++を補完する形で進んでたQTの部分が、今になってちょっと邪魔に感じるのはなんとも皮肉というか、面倒なかんじになってるなぁと……。
しかしqt5.7はいつになるのか……
5.6はかなり予定が遅れてのリリースだったのだけど、5.7も順調に遅れているようで。
予定では6/15にリリースらしいんだけど。
5.7は、c++11対応コンパイラが必須になるとかで、そうなると当然QT Creatorの方の対応も進んでくれるんだろうかなぁ。
今のところコンパイラよりもIDEのQT Creatorが足を引っ張ってる感じなので……。
まだまだこの辺の環境はvc++のほうもだけど、整備待ちな部分がおおいなぁ……。
やきもき。
一応QT5.6のMinGWは…gcc4.9.1? 4.9.2じゃないのかな。古い情報なのかもしれないけど。とにかく、そこそこc++14にも対応してるわけなのですが。
いかんせん、IDEであるQT Creatorがc++14対応がまだ不完全なようで。
もうvc++ではとっくに使えていたような物がうまく動かない(インテリセンスが効かない)
auto data = SmfFile::Open();
data->ここでインテリセンス効かずに候補が出ない。
std::shared_ptr<SmfData> data = SmfFile::Open();
data->だと出る。
と、もはやauto使うのが常套になってるので不便極まりない。
for(const auto& v : data->track_list()){
v->これもインテリセンス効かない。
}
QTには、独自のforeach文があったりするのだけども、いまではもうvc++とかとコードの共有考えると普通にstdのrange-based forを使うのが好ましいのだけども。
困ったことに上記の場合、要素がstd::mapのとき、firstやsecondすら出てくれ無かったりして。
せっかくautoでさっくり書けるのに、インテリセンス効かせるために型名書くのも面倒&型が変更されたときにコードの書き換えが必要と、利便性も悪いコードになってしまう。
かといってインテリセンス効かないのもめんどくさい……。
一時はc++は進歩が停滞していたので、QTは独自の拡張で一歩リードしていた感じだったのだけども、ここに来て急激に革新的な進歩を遂げはじめたc++に、今度はQTが置いてきぼりを食っちゃってる感じぽ。
んで、vc++の方でもそういう話が出てきてるのですが、QTでもコードモデルにclangを採用ってな話があって。
んでもQT Creatorのオプションの所にclangコードモデルを使用するっていうチェックボックスがあるのは気にはなってたんですよね。
でも、なぜかグレー表示で、使用するにチェック出来ない状態で。
何か別途で入れなきゃ行けないのかなーとか思ってたんですが。でもclangのコードモデル適応したら、上記の型推論(auto)周りでもインテリセンス使える用になるのでわ?
とおもって、ちょっとググってみたら……。
メニューの「ヘルプ」→「プラグインについて」の所から、プラグインの一覧がでて。そこでclangのコードモデルのプラグインの所にチェックを入れてQT Creator再起動。
したらグレーになってたclangコードモデル使用するのチェックボックスがチェック可能になるという。
なぜデフォルトでないのかというと、clangコードモデル使用すると、コードの解析やエラー検出&エラー文字なんかは秀逸なのだけども、その分遅いってのと、なんかclangコードモデル使うと良く落ちる……みたいな記事もあったりして。
まだまだ安定した機能ではないっぽい?
が、とりあえずオンにしてみたらば。
おお、autoからのインテリセンス効くようになってるぅ!
これはもう、使わないとやってられないだろ……とかおもったんですけど。
SFINAEでよく使うstd::enable_if_tがclangコードモデルだと定義されてないとかエラーになるんですよね。
vc++だとstd::enable_if_tは
namespace std{
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
}
とすでに用意されていて、QTでも(gccでもというべきか)用意されているようで、特に問題無くビルド出来ていたんだけども。(clangコードモデル適用前ではSFINAEのところで下線エラーになってたけどw この辺のコードはvc++で使ってたコードの移植なので、コンパイラの対応はvc++のが遅れてるけど、コードモデルの対応はvc++のが進んでたと言う感じなのかなぁ。ああややこしい)
ていうかclangはコードモデル使うだけでコンパイラとして使うわけではないのでclangコードモデルとしてのエラー表示はでるけど、ビルドは出来る状態なので、それほどこまりはしないのだけども、エラーの赤いのがでるのは気持ち悪い。
うーん。でもなんか、clangコードモデルを使用するのチェックボックスのしたに、オプション指定するところがあるのだけども。その中にc++98とかの文字がはいってたりして。
なんかこれ、ここでもc++14とかのオプション指定がいるんじゃないのかな。
QTのほうも、プロジェクトファイルに
CONFIG +=c++14
とかオプション必要だったりするので。
が、そもそもこのオプションの所。
-Wno-c++98-compat
-Wno-c++98-compat-pedantic
とか-Wno何とかって感じのがずらっとならんでるんだけど、Wnoってなんぞや?
……Warning no の略っぽい??
うーん。
ここにコマンドラインオプション書くらしいんだけど……。
-std=c++14
とか?
と試しに書いて見たらば、std::enable_if_tのところのエラーが消えた……。
-std=c++1z
vc++の現行のサポート範囲を越えちゃいそうだけど、こっちの指定のがよさげかな。
てか、これでうまくいってるのかよくわからん。
全然ドキュメントが見あたらないので。それっぽいところは英語ページばっかだし……。
地味にenum classで内部型指定するとき
enum class EventState : quint8{
...
}
この型指定の部分上の例だとquint8の部分がハイライタ効いてなかったんだけど、clangコードモデル適応したらハイライトついたりして。
んでもenum classてc++11のそれもかなり早い時期に出てたような機能だとおもうんだけど。
コレすら対応してないQT Creatorのc++11以降の対応はかなり遅れてるんだなぁというのが今更ながらに。
ほんのちょっと前までは、QTではSTLをあんまし使わないで、とくにコンテナ周りなんかはQTで用意されてるものをつかう感じだったのだけども(qtのコンテナ類はstlのよりも基本性能が良かったりもして)
ここ最近はすっかりc++11以降の書き方が馴染んでしまって、QTのコンテナ系だとemplace系がなかったりするので、今回のように、midiの1イベントを1オブジェクトとか扱う場合、数千、数万のオブジェクトを生成するので、、生成→コピーは無駄がおおい。
生成と同時に挿入できるemplace使わないと精神衛生上気持ち悪い……となって、結局QObjectをリストに入れて使う様な時のみQTのコンテナ使って、それ以外の単純なデータではstlのコンテナを使う形になったりして。
コンテナ操作系も、QTで用意されてるのよりはstlのアルゴリズム系とか使った方が、vc++に戻ったときに混乱少ないし……と、むしろQT独自の部分をstlの共通コードに置き換えていく感じの運用の方向に進んでいったりと、なんだかQTでのコーディングスタイルもいろいろ変わっちゃったかんじぽ。
進歩の停滞してたc++を補完する形で進んでたQTの部分が、今になってちょっと邪魔に感じるのはなんとも皮肉というか、面倒なかんじになってるなぁと……。
しかしqt5.7はいつになるのか……
5.6はかなり予定が遅れてのリリースだったのだけど、5.7も順調に遅れているようで。
予定では6/15にリリースらしいんだけど。
5.7は、c++11対応コンパイラが必須になるとかで、そうなると当然QT Creatorの方の対応も進んでくれるんだろうかなぁ。
今のところコンパイラよりもIDEのQT Creatorが足を引っ張ってる感じなので……。
まだまだこの辺の環境はvc++のほうもだけど、整備待ちな部分がおおいなぁ……。
やきもき。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
■
■
漫画関係
[憲法記念日]
[憲法記念日]
04
[みどりの日]
05
[こどもの日]
06
07
08
09
10
11
12
■
■
用事はまとめて
13
14
■
■
これはひどい……
15
■
■
新旧いりまじり
16
17
18
19
20
21
22
23
■
■
打ち切りか……
24
25
26
27
28
■
■
よくわからんかんじ
29
30
31
total:2076728 t:240 y:396
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp