C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
探検
C++相談室 part145
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2019/09/13(金) 17:13:24.60ID:/ygW08Jq401デフォルトの名無しさん
2019/10/08(火) 22:33:59.15ID:kGAGzuS0 予想通りの馬鹿回答で笑ってしまった。
やっぱいい判別になるわテンプレバカ。
やっぱいい判別になるわテンプレバカ。
402蟻人間 ◆T6xkBnTXz7B0
2019/10/08(火) 22:37:33.87ID:jfG+k1ni >>400
引数一つに対するテンプレート関数を作って特殊化してそれに少しずつ渡せばできるよ。
引数一つに対するテンプレート関数を作って特殊化してそれに少しずつ渡せばできるよ。
403デフォルトの名無しさん
2019/10/08(火) 22:42:38.66ID:/kdim2Vo C++嫌いなのにいつまで居座るんだろうなこのガイジ
404デフォルトの名無しさん
2019/10/08(火) 22:57:34.25ID:HxNAD6ah 好き嫌いの問題じゃねーんだわ
405デフォルトの名無しさん
2019/10/08(火) 23:04:05.43ID:/kdim2Vo こんな雑談スレ好きな奴以外に需要ないだろ
こんな辺境別に見なくて良いんだよ?
こんな辺境別に見なくて良いんだよ?
406デフォルトの名無しさん
2019/10/08(火) 23:08:13.69ID:hpLG4xMo >>400
c++17以降ならif constexprとstd::is_same_vの使用を検討してみるのもいいかも
c++17以降ならif constexprとstd::is_same_vの使用を検討してみるのもいいかも
407デフォルトの名無しさん
2019/10/09(水) 04:08:22.18ID:NmoqHfbB 400です。頑張ってみましたがどうにもコンパイルエラーが出ます
難しいですねC++は...
void print() {}
template<class... Args>
void print(const char* c, Args... args) {
cout << "[" << c << "]" << endl;
print(args...);
}
template<class First, class... Args>
void print(First first, Args... args) {
cout << first << endl;
print(args...);
}
int main() {
print(1, 3.14, "abc");
return 0;
}
難しいですねC++は...
void print() {}
template<class... Args>
void print(const char* c, Args... args) {
cout << "[" << c << "]" << endl;
print(args...);
}
template<class First, class... Args>
void print(First first, Args... args) {
cout << first << endl;
print(args...);
}
int main() {
print(1, 3.14, "abc");
return 0;
}
408デフォルトの名無しさん
2019/10/09(水) 04:17:51.46ID:NmoqHfbB あ、こういうふうにするとコンパイルできました。引数2個の関数を特殊化したからエラーになった?
テンプレートの展開のされ方がよくわからないけど、とりあえず目的のことはできました
ありがとうございました
void print(const char* c) {
cout << "[" << c << "]" << endl;
}
template<class T>
void print(T t) {
cout << t << endl;
}
template<class First, class... Args>
void print(First first, Args... args) {
print(first);
print(args...);
}
テンプレートの展開のされ方がよくわからないけど、とりあえず目的のことはできました
ありがとうございました
void print(const char* c) {
cout << "[" << c << "]" << endl;
}
template<class T>
void print(T t) {
cout << t << endl;
}
template<class First, class... Args>
void print(First first, Args... args) {
print(first);
print(args...);
}
409デフォルトの名無しさん
2019/10/09(水) 04:21:52.30ID:NmoqHfbB >>406
いわゆる型特性というやつでしょうか?enable_ifを使うのかと思い試したもののうまくいかず、
ネットで調べるとenable_ifと可変引数テンプレートは相性が悪いという意見を見つけたり...
いわゆる型特性というやつでしょうか?enable_ifを使うのかと思い試したもののうまくいかず、
ネットで調べるとenable_ifと可変引数テンプレートは相性が悪いという意見を見つけたり...
410デフォルトの名無しさん
2019/10/09(水) 07:02:07.47ID:8qv563yz >>409
if constexprを使った例はこんな感じ
template<class First, class... Args>
void print(First first, Args... args) {
if constexpr(std::is_same_v<First, const char*>){
std::cout << "[" << first << "]" << std::endl;
} else {
std::cout << first << std::endl;
}
if constexpr(sizeof...(args)>0){
print(args...);
}
}
if constexprを使った例はこんな感じ
template<class First, class... Args>
void print(First first, Args... args) {
if constexpr(std::is_same_v<First, const char*>){
std::cout << "[" << first << "]" << std::endl;
} else {
std::cout << first << std::endl;
}
if constexpr(sizeof...(args)>0){
print(args...);
}
}
411デフォルトの名無しさん
2019/10/09(水) 10:59:59.89ID:RbUf+g7C const char * 自体も class First や class Args と一致するんじゃね
412デフォルトの名無しさん
2019/10/09(水) 21:59:58.44ID:8qv563yz First と Argsの二つがあるのがややこしい場合は畳み込み式でもできるぞ
template<class... Args>
void print(Args... args){
([](auto t){
if constexpr(std::is_same_v<decltype(t), const char*>){
std::cout << "[" << t << "]" << std::endl;
} else {
std::cout << t << std::endl;
}
}(args), ...);
}
template<class... Args>
void print(Args... args){
([](auto t){
if constexpr(std::is_same_v<decltype(t), const char*>){
std::cout << "[" << t << "]" << std::endl;
} else {
std::cout << t << std::endl;
}
}(args), ...);
}
413デフォルトの名無しさん
2019/10/09(水) 22:42:32.58ID:J+0BhmRu win系のOSの画面に1.txt~5.txtがあります。1.txtと2.txtをドラッグして選択したとします。
この状態で3.txt~5.txtを選択したことにするにはどのようなコードを書けば良いですか?
この状態で3.txt~5.txtを選択したことにするにはどのようなコードを書けば良いですか?
415デフォルトの名無しさん
2019/10/10(木) 00:29:05.87ID:uUO69neG エクスプローラにdll注入とか?
416蟻人間 ◆T6xkBnTXz7B0
2019/10/10(木) 01:32:41.34ID:VnnXeZwz 前にやったことがある。
https://github.com/katahiromz/SysNotifyHooker
https://github.com/katahiromz/SysNotifyHooker
417デフォルトの名無しさん
2019/10/11(金) 01:40:25.90ID:n351RXRL std::shared_ptrを構築後に(カスタム)デリータを変更するのは無理?
既にどっかで作成済みのshared_ptrについて、破棄タイミングを後から見れないかなと
既にどっかで作成済みのshared_ptrについて、破棄タイミングを後から見れないかなと
418デフォルトの名無しさん
2019/10/11(金) 02:44:16.61ID:uKeO6WuZ 別のstd::shared_ptrをカスタムデリータ付きで構築してswapすれば
419デフォルトの名無しさん
2019/10/11(金) 04:06:16.56ID:RvdWaBLb shared_ptrとunique_ptrでdeleterの指定方法が違うってのが興味深いね。
420デフォルトの名無しさん
2019/10/11(金) 12:29:56.77ID:w5dDNHMJ VCのlatestでchar8_tが入ってたわ
やっとC++erが文字コード問題から解放されるんだな
やっとC++erが文字コード問題から解放されるんだな
421デフォルトの名無しさん
2019/10/11(金) 14:00:32.34ID:XWYiG0pn やったぜ。
422デフォルトの名無しさん
2019/10/11(金) 15:19:50.16ID:iqVlf+4W423デフォルトの名無しさん
2019/10/11(金) 23:12:48.13ID:WXWRLB/C >>392
別にテンプレ好きでも構わんが、C++ユーザー全員が趣味だと思ってんの?
別にテンプレ好きでも構わんが、C++ユーザー全員が趣味だと思ってんの?
424デフォルトの名無しさん
2019/10/11(金) 23:15:04.89ID:WXWRLB/C >>405
雑談以外に役に立つ書き込み出来なくてすみません、ってことか
雑談以外に役に立つ書き込み出来なくてすみません、ってことか
425デフォルトの名無しさん
2019/10/12(土) 08:08:31.86ID:vgsPsMOm >>423
C++ユーザが全員趣味なんてどこにも書いてないし、あるプログラミング言語が趣味でしか使われてない状況なら、委員会なんていらないわwww
C++ユーザが全員趣味なんてどこにも書いてないし、あるプログラミング言語が趣味でしか使われてない状況なら、委員会なんていらないわwww
426デフォルトの名無しさん
2019/10/12(土) 08:48:46.65ID:fl5cgmi7 衣食住の確保以外の仕事なんてみんな趣味みたいなもんだよ
なくたって構わんのだから
なくたって構わんのだから
427デフォルトの名無しさん
2019/10/12(土) 08:58:25.57ID:rY+KRAa3 農業以外は遊びってことか!
428デフォルトの名無しさん
2019/10/12(土) 09:03:04.22ID:tzOo7sle 原始人から見たら1次産業以外は遊びだしそうだろ
429デフォルトの名無しさん
2019/10/12(土) 09:06:03.19ID:w6XAfbR5 委員会なんて何の役にもたってねーだろ。
構文解析もまともに理解できてないバカが俺様仕様の理想に突っ走ってるだけのクソ組織で、
仕様の実装、デバッグの手間なんてこれっぽっちも考えてないのがよくわかる。
構文解析もまともに理解できてないバカが俺様仕様の理想に突っ走ってるだけのクソ組織で、
仕様の実装、デバッグの手間なんてこれっぽっちも考えてないのがよくわかる。
430デフォルトの名無しさん
2019/10/12(土) 09:14:16.17ID:Fi90LVHu デバッグできねえのを人のせいにするクズがよく言うぜ
431デフォルトの名無しさん
2019/10/12(土) 09:54:19.46ID:DT43rpFP 近年は新機能は三大コンパイラ(GCC,MSVC,Clang)での試験実装が入ってから仕様入りするのが普通になってるし
コンセプトなんてまさにデバッグの手間の軽減を第一目的に苦心して作られた機能なんだけど
どのへんを見てよくわかったのか教えて
コンセプトなんてまさにデバッグの手間の軽減を第一目的に苦心して作られた機能なんだけど
どのへんを見てよくわかったのか教えて
432デフォルトの名無しさん
2019/10/12(土) 10:00:51.19ID:w6XAfbR5 >>431
実装したことないやつは黙っててね。
で、そのコンセプトを実際のコードでコンパイルした時間がどれくらいになるかわかってる?
そういう有用なベンチマークもほとんど出さずに無理やり入れようとするから
信頼を無くしてるんだよ。
実装したことないやつは黙っててね。
で、そのコンセプトを実際のコードでコンパイルした時間がどれくらいになるかわかってる?
そういう有用なベンチマークもほとんど出さずに無理やり入れようとするから
信頼を無くしてるんだよ。
433デフォルトの名無しさん
2019/10/12(土) 10:19:47.03ID:Nq/Z/R6A 経験したことは全て正しいっていう日本特有のアホ理論だろそれ
経験してないお前に発言権は無い、っていう
その理屈を持ち出すヤツは大抵はアホ
経験してないお前に発言権は無い、っていう
その理屈を持ち出すヤツは大抵はアホ
434デフォルトの名無しさん
2019/10/12(土) 10:24:58.21ID:69fBrMS4 コンパイル時間は、コンパイラの出力する最適化されたバイナリの実行速度に比べたら問題ではないだろ
しかも構文解析にかかる時間なんて最適化時間に比べりゃ屁みたいなもの
しかも構文解析にかかる時間なんて最適化時間に比べりゃ屁みたいなもの
435デフォルトの名無しさん
2019/10/12(土) 10:26:15.49ID:mYzO26Pi 似たようなものを複数書いてもバグ修正時に一部見落としなんて馬鹿げたことになるわけで
マクロでもテンプレートでもまとめられるものはまとめたほうがいいわな
マクロでもテンプレートでもまとめられるものはまとめたほうがいいわな
436デフォルトの名無しさん
2019/10/12(土) 10:27:43.23ID:69fBrMS4 c++言語の場合、パースのコンテキスト依存が、識別子の種類でも変わるから、テンプレート時の記述でtypename やらtemplateやらで、識別子の種類自体を指定する羽目になっているのはあるよね
437デフォルトの名無しさん
2019/10/12(土) 11:23:13.45ID:zNYGVDyE438デフォルトの名無しさん
2019/10/12(土) 11:27:59.19ID:KmpqQhzT >>432
お前が信用しないのは勝手だが、みんなの総意みたいに言うなよ
お前が信用しないのは勝手だが、みんなの総意みたいに言うなよ
439デフォルトの名無しさん
2019/10/12(土) 12:09:52.46ID:73DoxmjF 数万行で10分が早いのか遅いのかよくわからない
440デフォルトの名無しさん
2019/10/12(土) 12:15:22.09ID:69fBrMS4 それは本当にパースの複雑さのせいなのかは疑問だな
templateだと、プログラマは簡単にコンパイラの仕事をあまり意図せず増やしてしまいがちだからね。
std visitで引数増やすとコンパイル時間は簡単に増やせるよ。
5つくらいでもうコンパイラが落ちたりする
やらせていることの面倒くささ、それを手書きすることを考えれば妥当なのだけど
templateだと、プログラマは簡単にコンパイラの仕事をあまり意図せず増やしてしまいがちだからね。
std visitで引数増やすとコンパイル時間は簡単に増やせるよ。
5つくらいでもうコンパイラが落ちたりする
やらせていることの面倒くささ、それを手書きすることを考えれば妥当なのだけど
441デフォルトの名無しさん
2019/10/12(土) 12:41:57.75ID:Tqr7IA/6 最近C++触ってないけど数万程度で10分もかかるの?
10万行程度なら5分以内に終わってほしいところだけど…
10万行程度なら5分以内に終わってほしいところだけど…
442デフォルトの名無しさん
2019/10/12(土) 13:13:02.91ID:trzfpzAc >>439
かなり遅いです。
ヘッダファイル *.h とソース本体のファイル *.c では事情が違いますが、
OSのバージョンによりますが、Win32の標準ヘッダファイルの windows.h などだけでも
コメントを除外しても2万行弱くらいあります。
これのパースは、VC++で1秒〜数秒くらいです。
通常は、precompiled header を使うので、一つのプロジェクトで一度だけ
パースされることが多いです。
ただし、プロトタイプ宣言やマクロ定義、構造体定義、inline関数定義
などだけで、実際のコード生成は伴わないので、*.c の数万行とは
また事情が違います。*.c はコード生成を伴うので、同じ行数であれば*.hよりも
遅くなる傾向があります。
しかし、それでも、C++98 の場合、数万行だと3秒〜10秒以下でコンパイルできます。
かなり遅いです。
ヘッダファイル *.h とソース本体のファイル *.c では事情が違いますが、
OSのバージョンによりますが、Win32の標準ヘッダファイルの windows.h などだけでも
コメントを除外しても2万行弱くらいあります。
これのパースは、VC++で1秒〜数秒くらいです。
通常は、precompiled header を使うので、一つのプロジェクトで一度だけ
パースされることが多いです。
ただし、プロトタイプ宣言やマクロ定義、構造体定義、inline関数定義
などだけで、実際のコード生成は伴わないので、*.c の数万行とは
また事情が違います。*.c はコード生成を伴うので、同じ行数であれば*.hよりも
遅くなる傾向があります。
しかし、それでも、C++98 の場合、数万行だと3秒〜10秒以下でコンパイルできます。
443デフォルトの名無しさん
2019/10/12(土) 13:23:47.19ID:UpKv7BB3 ↑こいつはVSスレで有名なキチガイなので放置で
444デフォルトの名無しさん
2019/10/12(土) 13:24:45.74ID:69fBrMS4 c++の文法のせいでパースが遅いってレベルの話じゃないような
445デフォルトの名無しさん
2019/10/12(土) 15:33:32.46ID:UCFxfzGx ヘッダオンリーのライブラリがポータブルとか言われてもてはやされるのがc++だからね
生産性の意識が間違った方向に向いてる
コンセプトでどうなることやら
生産性の意識が間違った方向に向いてる
コンセプトでどうなることやら
446デフォルトの名無しさん
2019/10/12(土) 15:52:13.73ID:K75UXpIa 俺の10万行程度のアプリは1分以内にコンパイル終わるが・・・
10分てどこの世界だ
10分てどこの世界だ
447デフォルトの名無しさん
2019/10/12(土) 19:26:26.29ID:8VsKOlOD 「参照の配列」を作りたいときって現状 reference_wrapper を使う以外ないですか?
448デフォルトの名無しさん
2019/10/12(土) 20:29:07.16ID:iehpkqJW ポインタやスマポじゃいかんのか
449デフォルトの名無しさん
2019/10/12(土) 20:55:57.96ID:cS98TRHZ450デフォルトの名無しさん
2019/10/12(土) 23:18:34.83ID:zNYGVDyE spiritで構文解析させてたコード(その上et使った自作ライブラリあり)だから例として極端だったかもしれんけどね
プリコンパイルドヘッダは使ってたよ
効いてるときは数分かからなかったと思う
というか5年以上そのコード使ってないんで今のマシンならまだマシになるとは思う
プリコンパイルドヘッダは使ってたよ
効いてるときは数分かからなかったと思う
というか5年以上そのコード使ってないんで今のマシンならまだマシになるとは思う
451デフォルトの名無しさん
2019/10/13(日) 01:04:01.79ID:2Ilco01g boostを多用した10数万行のソースでprecompileありでreleaseビルドしたら10分くらいかかってたけど、debugビルドでは1,2分くらいだった気がする。パースだけなら大したことないけど最適化がかなり遅いと思われる。
452デフォルトの名無しさん
2019/10/13(日) 01:06:42.02ID:uORMYh+w 翻訳単位が増えると単純に遅くなるし
リンク時最適化でもさらに遅くなる
リンク時最適化でもさらに遅くなる
453デフォルトの名無しさん
2019/10/13(日) 01:16:58.35ID:Fwjkj11x LTOは本当のリリース時や速度検証の時以外は外しても問題ないよね
454デフォルトの名無しさん
2019/10/13(日) 09:37:54.86ID:kfwaB+Y7 ここの話で出ている
>296
>>294
clangさんが教えてくれた
std::string hogehoge() { return A<_T3>::template get<std::string>();}
>436
c++言語の場合、パースのコンテキスト依存が、識別子の種類でも変わるから、
テンプレート時の記述でtypename やらtemplateやらで、
識別子の種類自体を指定する羽目になっているのはあるよね
<_T3>::templateやtypenameをどの様な場合に書かないといけないのか?
この辺を解説した初心者向けか入門者向けの解説サイトみたいな所が
何処かに有りませんか?
サイトが無さそうなら検索に向いている単語みたいなのでも有れば助かる
::templateとかで検索しても上手く引っ掛からないみたい(有るには有るけど少ない)
>296
>>294
clangさんが教えてくれた
std::string hogehoge() { return A<_T3>::template get<std::string>();}
>436
c++言語の場合、パースのコンテキスト依存が、識別子の種類でも変わるから、
テンプレート時の記述でtypename やらtemplateやらで、
識別子の種類自体を指定する羽目になっているのはあるよね
<_T3>::templateやtypenameをどの様な場合に書かないといけないのか?
この辺を解説した初心者向けか入門者向けの解説サイトみたいな所が
何処かに有りませんか?
サイトが無さそうなら検索に向いている単語みたいなのでも有れば助かる
::templateとかで検索しても上手く引っ掛からないみたい(有るには有るけど少ない)
455デフォルトの名無しさん
2019/10/13(日) 10:06:17.74ID:zTi0Tc1S コンパイラが出すメッセージで検索してみれば?
456デフォルトの名無しさん
2019/10/13(日) 11:14:46.72ID:Fwjkj11x457デフォルトの名無しさん
2019/10/13(日) 17:23:21.82ID:Y0ptPfKA 他の言語で書かれたコードをスクリプトの要領で
C++から呼び出して実行したいのですが、
そういった事をするのに適した言語ってどういった物があるのでしょうか?
C++から呼び出して実行したいのですが、
そういった事をするのに適した言語ってどういった物があるのでしょうか?
458デフォルトの名無しさん
2019/10/13(日) 17:23:50.21ID:Y5pFrXym >>457
パイソン
パイソン
459デフォルトの名無しさん
2019/10/13(日) 17:31:01.31ID:9auzzyVZ 言語間のABIの違いを透過的にしたいのならアセンブラの出番だね
460デフォルトの名無しさん
2019/10/13(日) 17:36:26.67ID:1+8oai62 まさにそういう用途で作られたluaとか
461デフォルトの名無しさん
2019/10/13(日) 17:44:25.71ID:j3fG3YC6 >>457
今ならluaかjs(V8/ChakraCore/SpiderMonkey)だな。
【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1474536226/
pythonもできなくはないけど手軽とは言えない。
pythonを使いたい理由がなければやめておくのが吉。
今ならluaかjs(V8/ChakraCore/SpiderMonkey)だな。
【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1474536226/
pythonもできなくはないけど手軽とは言えない。
pythonを使いたい理由がなければやめておくのが吉。
462デフォルトの名無しさん
2019/10/13(日) 18:10:48.99ID:pJwii1Hg pythonは呼ぶ方で、呼ばれる方としてはほとんど想定されてないわな。
463デフォルトの名無しさん
2019/10/13(日) 19:05:43.03ID:m8H1BiEu lua以外無い
464デフォルトの名無しさん
2019/10/13(日) 19:35:48.57ID:rjz838Ki >>457
tcl
tcl
465デフォルトの名無しさん
2019/10/13(日) 20:24:22.36ID:kfwaB+Y7 >455,456さんどうもです
エラーが出たらそうしてみます
リンク先を読んで見ましたが
自分には難しいのでそのページを手がかりに検索して(依存名で探してみた)
漸く理解出来た気がします
前にstd::を付ける付けないって話を何処かでしてい
自分的にはどうしたものだろうか?
って感じだったんですけど
adlやtwophasenameとかの解説と合わせて書いて有るのを呼んでいて
std::を付けるのはかなり重要なんだと思えてきた
今までnamespaceって単なるグループ名を付けている
くらいの感覚だったんですけど
意外と重要なんですね
どうもでした
エラーが出たらそうしてみます
リンク先を読んで見ましたが
自分には難しいのでそのページを手がかりに検索して(依存名で探してみた)
漸く理解出来た気がします
前にstd::を付ける付けないって話を何処かでしてい
自分的にはどうしたものだろうか?
って感じだったんですけど
adlやtwophasenameとかの解説と合わせて書いて有るのを呼んでいて
std::を付けるのはかなり重要なんだと思えてきた
今までnamespaceって単なるグループ名を付けている
くらいの感覚だったんですけど
意外と重要なんですね
どうもでした
466デフォルトの名無しさん
2019/10/14(月) 15:05:53.73ID:rfaLGQBa template<size_t N>
class Test{
public:
private:
int m[N];
};
上の様なクラスでコンストラクタでmを値を指定して初期化したいんだけどNの数は未定ではないですか。
こういう場合のコンストラクタの書き方ってどうすればいいのでしよう?
可変引数?
class Test{
public:
private:
int m[N];
};
上の様なクラスでコンストラクタでmを値を指定して初期化したいんだけどNの数は未定ではないですか。
こういう場合のコンストラクタの書き方ってどうすればいいのでしよう?
可変引数?
467デフォルトの名無しさん
2019/10/14(月) 15:12:05.32ID:BPBGG2nS コンパイル時に決まってないならvectorかなんかにするしかない
468デフォルトの名無しさん
2019/10/14(月) 15:18:08.00ID:P81x9Tjl templateパラメータの整数にはコンパイル時に決まらない数値は入れられない
469デフォルトの名無しさん
2019/10/14(月) 15:28:00.19ID:qN7fFVrS >>466
そもそも、そのような生配列は、デフォルトでは0初期化もされないので、
メンバ初期化子リストを使わなくても効率は落ちないので、
コンストラクタ内部で普通に代入演算子を使って初期化すればいい。
すると、単に任意個数の引数をコンストラクタに渡す問題になる。
それには、昔ながらの va_list を使って渡す方法と、
関数テンプレートやテンプレートクラスを使って、自分自身を一つずつ引数を
減らしながら呼び出していく方法の二通りある。
そもそも、そのような生配列は、デフォルトでは0初期化もされないので、
メンバ初期化子リストを使わなくても効率は落ちないので、
コンストラクタ内部で普通に代入演算子を使って初期化すればいい。
すると、単に任意個数の引数をコンストラクタに渡す問題になる。
それには、昔ながらの va_list を使って渡す方法と、
関数テンプレートやテンプレートクラスを使って、自分自身を一つずつ引数を
減らしながら呼び出していく方法の二通りある。
470デフォルトの名無しさん
2019/10/14(月) 15:28:52.79ID:Y7o3BEyU471デフォルトの名無しさん
2019/10/14(月) 15:30:45.59ID:rfaLGQBa >>469
一度考えたのはテンプレートの可変引数なんですが
//Testのコンストラクタ
template<typename... T>
Test(T... args):m{args...}{
}
templateの可変引数の為にどんな型でも一致してしまい、そのくせにdoubleからintなどの変換をしてくれないのでinitializer_listを引数に出来たり、もしくはもっといい初期化方法があるのかなと思った次第です。
一度考えたのはテンプレートの可変引数なんですが
//Testのコンストラクタ
template<typename... T>
Test(T... args):m{args...}{
}
templateの可変引数の為にどんな型でも一致してしまい、そのくせにdoubleからintなどの変換をしてくれないのでinitializer_listを引数に出来たり、もしくはもっといい初期化方法があるのかなと思った次第です。
472デフォルトの名無しさん
2019/10/14(月) 16:18:31.70ID:1VO4fG6M473デフォルトの名無しさん
2019/10/14(月) 16:48:34.42ID:REdvl5Gt >>471
>そのくせにdoubleからintなどの変換をしてくれないので
この点に関しては、以下の拡張展開でいけるはず。
template<typename... T>
Test(T... args):m{((int)args)...}{
}
>そのくせにdoubleからintなどの変換をしてくれないので
この点に関しては、以下の拡張展開でいけるはず。
template<typename... T>
Test(T... args):m{((int)args)...}{
}
474デフォルトの名無しさん
2019/10/14(月) 16:55:25.15ID:REdvl5Gt templateの「非型引数」を使えば、理論上は、
template<int...args>
Test(int...args):m{args...}{
}
と書ける可能性はあるかもしれないけど、試してみてないので分からない。
template<int...args>
Test(int...args):m{args...}{
}
と書ける可能性はあるかもしれないけど、試してみてないので分からない。
475デフォルトの名無しさん
2019/10/14(月) 17:04:44.38ID:REdvl5Gt C++11 から、template 仮引数(パラメーター)に非型パラメーターパックが使える。
分かっているとは思うけど、このパックとは可変長引数をまとめて入れる容器の様な意味。
実際にやってみてないのでわからない。
https://en.cppreference.com/w/cpp/language/template_parameters
【Non-type template parameter】
type ... name(optional) (3) (since C++11)
3) A non-type template parameter pack with an optional name.
分かっているとは思うけど、このパックとは可変長引数をまとめて入れる容器の様な意味。
実際にやってみてないのでわからない。
https://en.cppreference.com/w/cpp/language/template_parameters
【Non-type template parameter】
type ... name(optional) (3) (since C++11)
3) A non-type template parameter pack with an optional name.
476デフォルトの名無しさん
2019/10/14(月) 17:48:47.38ID:DdI7aqm2 >>466
要素数がコンパイル時に決まってるなら std::array 使って Test<3> x{{1,2,3}} とすることは簡単にできそう。
要素数がコンパイル時に決まってるなら std::array 使って Test<3> x{{1,2,3}} とすることは簡単にできそう。
478デフォルトの名無しさん
2019/10/16(水) 00:49:52.16ID:4OT/K/L6 >>473 Thank you!!
479デフォルトの名無しさん
2019/10/18(金) 03:20:02.11ID:kbBE7aSe 他クラスのメンバ関数テンプレートを呼び出すときってtemplateキーワードを関数名の前に付けないと
operator<と間違われてエラーになりますですよね?具体的に例をあげてみますと
https://wandbox.org/permlink/F7zl1fDh3qc216hd
これの t.template func<T2>(); のところですが、実はこのtemplateキーワードを外しても
WindowsのVisualStudioだとコンパイルが通ってしまいます。
これってVisualStudioが規約違反しているという理解で合っていますか?
operator<と間違われてエラーになりますですよね?具体的に例をあげてみますと
https://wandbox.org/permlink/F7zl1fDh3qc216hd
これの t.template func<T2>(); のところですが、実はこのtemplateキーワードを外しても
WindowsのVisualStudioだとコンパイルが通ってしまいます。
これってVisualStudioが規約違反しているという理解で合っていますか?
480デフォルトの名無しさん
2019/10/18(金) 03:32:35.18ID:L8qU11hp vsのバージョンは?
2017の途中からtwo phaseに対応しだしてtemplate周りの怪しい挙動は大分改善された
2017の途中からtwo phaseに対応しだしてtemplate周りの怪しい挙動は大分改善された
481デフォルトの名無しさん
2019/10/18(金) 11:35:03.93ID:kGqx1xn0 >>480
Express 2017 for Windows DesktopとProfessional 2019で確認しています
準拠モードを「はい」にしたら標準の規約に従うのかと思ったんですが変化なしでした
開発はWindowsでしつつもWindowsとLinuxどちらでもコンパイルできるようにしたいんですが
もしかしてそう簡単な話ではないんですかね
Express 2017 for Windows DesktopとProfessional 2019で確認しています
準拠モードを「はい」にしたら標準の規約に従うのかと思ったんですが変化なしでした
開発はWindowsでしつつもWindowsとLinuxどちらでもコンパイルできるようにしたいんですが
もしかしてそう簡単な話ではないんですかね
482デフォルトの名無しさん
2019/10/18(金) 12:11:07.40ID:8CoI4J3v >>481
visual studio cmakeプロジェクトでググる
visual studio cmakeプロジェクトでググる
483デフォルトの名無しさん
2019/10/18(金) 15:49:49.04ID:/qIwU54Z effective modern c++のnoexceptの項読んで思ったんだが、
C++の関数内でCの関数(具体的にはOpenGLとか)を呼び出した時に
C++側でcatchできる例外って具体的にどんなものがあるの?
試したことないけどmalloc失敗でbad_allocは飛ばないよね?
C++の関数内でCの関数(具体的にはOpenGLとか)を呼び出した時に
C++側でcatchできる例外って具体的にどんなものがあるの?
試したことないけどmalloc失敗でbad_allocは飛ばないよね?
484デフォルトの名無しさん
2019/10/18(金) 18:57:22.15ID:eJANlQqR Windowsなら構造化例外とか
485デフォルトの名無しさん
2019/10/18(金) 19:16:01.68ID:rTjJuJDg486デフォルトの名無しさん
2019/10/18(金) 19:19:00.58ID:5559SrY6 VCコンパイラがWindows専用だからcmakeだけでは解決しない
clangオプション使えばいけるんじゃね
clangオプション使えばいけるんじゃね
487デフォルトの名無しさん
2019/10/18(金) 19:27:02.65ID:BPo3Wxa0 cmakeってなんとなくしか使ってないんですけど何なんですか
OpenCVのソースをビルドするときに使いましたけど、cmakeした後にまたVisual Studioでコンパイルする必要があるのはなぜですか
OpenCVのソースをビルドするときに使いましたけど、cmakeした後にまたVisual Studioでコンパイルする必要があるのはなぜですか
488デフォルトの名無しさん
2019/10/18(金) 21:38:24.25ID:1VxWd/yq489デフォルトの名無しさん
2019/10/18(金) 22:32:33.72ID:HsDKWWc7 >>487
ビルドするためのスクリプトを作るツール、みたいに考えるといいよ
linux環境ならLinux用のものを作ってくれる
makeだと基本はlinux専用だし、.slnや.vcxprojはwindows専用だから、両方を面倒見るのは大変でしょ
ビルドするためのスクリプトを作るツール、みたいに考えるといいよ
linux環境ならLinux用のものを作ってくれる
makeだと基本はlinux専用だし、.slnや.vcxprojはwindows専用だから、両方を面倒見るのは大変でしょ
490デフォルトの名無しさん
2019/10/18(金) 22:48:18.41ID:f2FG8XiO ビルドするためのスクリプトを作るためのスクリプトを作るためのスクリプトなんてよくある話だよ。
491デフォルトの名無しさん
2019/10/18(金) 22:49:57.04ID:a3uRi/Ig 秘伝のタレな
492デフォルトの名無しさん
2019/10/18(金) 23:06:23.18ID:liCy40EB GNU autotoolsをまともにいじる輩は消え去ったという現実をcmakeも味わうことになる。
バカは同じ間違いをする。歴史も見ずに。
バカは同じ間違いをする。歴史も見ずに。
493デフォルトの名無しさん
2019/10/19(土) 00:19:02.04ID:JKxr+RAJ CMakeってKitwareっていう大学発ベンチャーから出てきたやつだよな
もとはVTKとか可視化用ライブラリ開発してるしがないベンチャーだったのに
CMakeのおかげでやたら顔が知られるようになった
もとはVTKとか可視化用ライブラリ開発してるしがないベンチャーだったのに
CMakeのおかげでやたら顔が知られるようになった
494デフォルトの名無しさん
2019/10/19(土) 00:40:35.72ID:kiA3Djjo VTKとparaviewの方が有名じゃなかったのか
495デフォルトの名無しさん
2019/10/19(土) 00:44:42.31ID:JKxr+RAJ ParaViewは最近になって有名になってるけど所詮はVTKのラッパーでしょ
CMakeのほうが影響度はでかいと思う
ベンチャーでここまでやれたなら大成功な事例だね
CMakeのほうが影響度はでかいと思う
ベンチャーでここまでやれたなら大成功な事例だね
496デフォルトの名無しさん
2019/10/19(土) 00:58:43.11ID:kiA3Djjo cmakeより前から有名じゃね?
497デフォルトの名無しさん
2019/10/19(土) 01:00:35.87ID:4XSJxZBk cmake邪魔くさい
Makefile.am, configure.acからautoreconfしてconfigure作る方が楽。
windows用もmingwでクロスビルドしちゃえば楽だし。
WSLでwindowsからも見えるパスでビルドすると作ったwindows用binaryをすぐに起動できるしいうことなし
Makefile.am, configure.acからautoreconfしてconfigure作る方が楽。
windows用もmingwでクロスビルドしちゃえば楽だし。
WSLでwindowsからも見えるパスでビルドすると作ったwindows用binaryをすぐに起動できるしいうことなし
498デフォルトの名無しさん
2019/10/19(土) 01:28:27.26ID:kDntEbbb mingw使わずに標準のwindowsの環境で使えるようになってから出直してきて
499デフォルトの名無しさん
2019/10/19(土) 01:36:12.28ID:+xsHXYvs mesonいいぞー
500デフォルトの名無しさん
2019/10/19(土) 01:37:16.21ID:JKxr+RAJ makeとかのビルドツールって超重要なはずなのにおざなりな状況になってるのは不思議だ
なんとかしてくれ
なんとかしてくれ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【雑談】暇人集会所part18
