C++相談室 part144

■ このスレッドは過去ログ倉庫に格納されています
2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/

このスレもよろしくね。
【初心者歓迎】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/ (日本語)

----- テンプレ ここまで -----
647デフォルトの名無しさん
垢版 |
2019/08/27(火) 00:16:27.36ID:tgTbqYO8
最近C++を学び始めたのですが、
テンプレート引数の型をコンパイル時に文字列に変換する方法ってあるのでしょうか?

できればテンプレートの特殊化やプリプロセス命令を使わずに以下の用な感じでかければよいのですが

template<typename Type>
class Hoge
{
public:
static constexpr char* Text = Typeを文字列に変換して納入したい
};
2019/08/27(火) 00:31:42.36ID:EWBBAhUG
無理ゲー
あくまで自動にこだわるならtypeid使え。
自作クラスだけならクラス名を名乗るメンバ関数でも作っとけ
2019/08/27(火) 01:14:06.25ID:tTk1EYER
https://github.com/Manu343726/ctti
2019/08/27(火) 08:26:10.70ID:CO6EoWnq
>てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。

いつの時代から来たんだよw
ソースに #include 書く度にいちいちMakefile書き換えんのか?
2019/08/27(火) 08:40:44.27ID:l579ej24
>>646
初心者狩りしてるこいつ一人ww
2019/08/27(火) 17:31:34.79ID:icKeAJ7/
>>649
以前nameofとかいうライブラリ?が同じくgithubにあったけどどっちが便利かな
というかこの手のは他にもあるっぽいな

>>651
いや合ってると思うけど
ウェブなのかネイティブなのか、多分ごっちゃになってるだろうからまずそこを指摘すべき
2019/08/27(火) 18:46:31.35ID:idJxRw9J
別にウェブだからって既存のブラウザ上で動くものという定義はあるまい
サーバーサイドもクライアントサイドも両方C++で作ればいい
そもそもブラウザだってC++で作られているんだから
2019/08/27(火) 19:25:57.30ID:JlFv53u2
>>653
両方自分で作るならもっとシンプルなプロトコルでやるよ
2019/08/27(火) 21:20:18.36ID:FzNWLyW5
typeidってPFで戻ってくる値が違うからテスト書くとき気をつけるん
2019/08/28(水) 08:42:46.33ID:4Zzob7TG
>>650
書き換えなくていいように書けるようにするってことだよバカ。
てか依存をしっかり見るって意味じゃヘッダを意識するってのは
相当大事なんだがな。
タスク管理を意識した場合、どんなレイヤーで仕事する場合でも重要になる。
2019/08/28(水) 08:50:01.49ID:4Zzob7TG
てか想像以上にビルド周りの技術ってc+11から入った輩は理解してないのな。。
またクソシステムの再生産が10年単位で続きそうだわ。。
2019/08/28(水) 10:10:28.35ID:mAC2Cq6c
そりゃこのスレでも
「閃いた!stdを usingすれば文字を打つのが少なくなるよ!」って宣う輩がいるくらいだし
2019/08/28(水) 10:16:52.21ID:FUc/M6fg
趣味でc++のパズルにはまってる人と
仕事で生産的に使いたい人とでは
言語に期待するものが違うからね
区別しないと
2019/08/28(水) 10:25:14.14ID:4pdYY7R1
このビルド周りのクソ仕様のせいで年々インタプリタ型に人が流れていくんだわ
2019/08/28(水) 11:21:15.45ID:PYS/X6sQ
VS使ってるからmakeとかさっぱりです
2019/08/28(水) 11:48:22.94ID:KZSjYbkv
新モジュールシステム対応で改善されるはず…
https://cpprefjp.github.io/lang/cpp20/modules.html
2019/08/28(水) 14:10:32.76ID:DpQqY3bZ
そのうちC++ライブラリ用リポジトリとかC++用パッケージマネージャとか作りはじめそう
2019/08/28(水) 15:22:40.67ID:A/ckRNOE
車輪の再発明が好きなやつが多すぎてウンザリする
道具ばっか作ってどうすんだ
道具つかって絵描いたり家建築したりするのが仕事なのに
2019/08/28(水) 17:41:27.32ID:1Ka29vHv
仕事じゃなくて趣味だからな。
2019/08/28(水) 18:52:20.58ID:r3MNaUf0
makefileなんて十数年触ってないしもう忘れたけど
>>656-657には同意するわ
依存関係も考えた上で設計&利用しないとコンパイル時間の増大とかに全く対処できなくなる
新しい機能には飛びつくわりに古い部分(しかも無くなってるわけではない)をおざなりにするのはあかん
2019/08/28(水) 20:21:30.73ID:4Zzob7TG
>>662
テンプレートの export の問題とかさ。。ほんと何周同じことしてんだよって思うわ。
2019/08/28(水) 20:42:39.92ID:G5Ue/9b7
>>656
これ、依存関係を自分で書くんじゃなくて gcc -M とかで自動的に判断させることを言っているんだろうか?
msbuildを含めて今どきの大抵のビルドシステムでできることなんだが。
669デフォルトの名無しさん
垢版 |
2019/08/28(水) 20:46:54.49ID:W4Wf3gf+
>>649
こんな良いライブラリーがあるんですね。
非常に助かりました。ありがとうございます!
2019/08/28(水) 20:59:56.83ID:4Zzob7TG
>>668
makeが実装が一番ネイティブでわかりやすいってことだよ。
bazelなんか中身はもろにmakeだろありゃ。
ただはじめからbazel使ってたらエラーメッセージ見てもわからんだろうし、
そういうのをはじめに薦める奴は詐欺だろ。
2019/08/28(水) 22:02:26.02ID:ieioKQ06
makeがネイティブ?わかりやすい?冗談だろ
暗黙ルールとか特殊変数とか特別扱いのターゲットとかやめろ
アーカイブだの何だのを勝手に推定しておせっかいな処理挟み込むのを全部やめろ
積もり積もったウンコの山を無効にさせろ
2019/08/28(水) 22:04:23.57ID:/X8N1eZO
本来のmakeのルールは単純なのにな
なんであんなそびえ立つ糞になったのか
2019/08/28(水) 22:09:49.61ID:NdwuNYuZ
ルール上書きしろよ
2019/08/28(水) 22:33:45.39ID:4Zzob7TG
>暗黙ルールとか特殊変数とか特別扱いのターゲットとかやめろ
まあこれはわかる。

>アーカイブだの何だのを勝手に推定しておせっかいな処理挟み込むのを全部やめろ
これは逆に暗黙のルールを使ってるからだろ。

基本的に明示的なmakefileを書いてないのが原因だが、
こんなこと言い出したら他のビルドツールなんて使えんぞ。。
vc compilerなんかもっと暗黙の設定まみれだわ。
2019/08/28(水) 23:47:07.56ID:atkmfnSl
マルチプラットフォームで使えて、固定小数点を扱えるOSSっていいのないかな?
2019/08/28(水) 23:56:49.59ID:Lri1s1BK
GMPとか?
という話ではなく?
2019/08/29(木) 00:02:01.84ID:7sVXLGAA
cobol
2019/08/29(木) 21:16:18.09ID:nzSyygVl
>>675
どうぞつかってください
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
679デフォルトの名無しさん
垢版 |
2019/08/29(木) 21:47:21.89ID:81mive3+
使われていないクラスのstaticメンバ変数って生成されないのでしょうか?
2019/08/29(木) 22:28:37.81ID:Fx5HC5GZ
>>678
汚いプログラムだなあおい
2019/08/29(木) 23:00:42.76ID:KkrIMV0W
>>679
多分生成される可能性が高いね
何故ならC++にはコンストラクタがあるから
つまりはstatic変数のコンストラクタで何かしているかもしれないだろう
だからリンカの最適化は削除をしないだろうね
ただ、普通のintとかだとリンカの最適化で削除されるかもしれないけど
まぁ運しだい
ともかく、規格では多分決まってない
2019/08/29(木) 23:20:08.64ID:xxmh5CSn
>>679
そのstaticメンバの定義を消してコンパイルしてもエラーにならなければ生成されてない
ちなみにstatic constとかの変数は元々ほとんどのケースで生成されてない
2019/08/29(木) 23:21:51.82ID:nf7j+lKK
やはりコンパイラによるのでは
2019/08/29(木) 23:29:30.27ID:KkrIMV0W
クラスのstatic変数といっても
コンパイラからしたらグローバル変数みたいなものだからな
使ってないグローバル変数は削除されるのか?
さあな
2019/08/29(木) 23:33:23.53ID:xxmh5CSn
visual sutdioというかvc++だと使ってないコードを削除するみたいなオプションあったからもしかしたら消えるかもしれない
他はよく知らない・・・
2019/08/30(金) 00:11:27.74ID:fVqdV4kl
libにしなかったらlinkしたobj全て
libにしたらobj単位でシンボル一つでも参照があればlinkされるのが基本じゃね
組み込み用のコンパイラだとそれ以上に頑張ってサイズ削ることもあるだろうけど
2019/08/30(金) 00:41:24.99ID:pQR0WkIg
グローバル変数のコンストラクタに起動時処理書いといたら、これが案外呼ばれるタイミングがわからない。
手続きの中で明示的に参照しにいかないとあかんと思った。
2019/08/30(金) 00:46:48.02ID:fVqdV4kl
static変数の参照返す関数つくるのはよくやる
2019/08/30(金) 00:50:00.39ID:T2NlJT89
ここの動的初期化によるけど、まあ分からん・・・
定数初期化しとけるならそうしとくのがいいけどいつもできるわけでもない
https://ja.cppreference.com/w/cpp/language/initialization
2019/08/30(金) 00:56:53.55ID:8Dc5lx9D
一見使ってないからと言ってコンパイラが勝手にデータ構造替えちゃったら動的リンク時とか整合性取れなくなっちゃう気がする
2019/08/30(金) 08:30:00.34ID:Okk0GWIA
動的ライブラリが元のバイナリの変数を暗黙に触るかはOSによる。
linuxは触れるがmacは触れない。
2019/08/30(金) 21:41:54.95ID:OdSxakdr
std::string="あいう";

c++って内部的な文字コードって何になるのかな?
あといまいちwstringの使い分けがわかんない、日本語だとwstring使えばいいのか?
2019/08/30(金) 21:49:07.10ID:zlaBwQso
決まってない
最近ようやく明示的にutf8対応しだした
wstringはワイド文字列
2019/08/30(金) 22:10:41.83ID:OdSxakdr
決まってないって言うのは処理系依存ってこと?
2019/08/30(金) 22:14:30.31ID:Q+0yO3vE
それぐらい自分で試したら?
それが確実でしょ
2019/08/30(金) 22:18:34.99ID:QpJdGFlG
sringの中の文字コードは入れた文字列の文字コード
普通の文字列リテラルの文字コードはそのソースコードが書かれたテキストの文字コード
文字列リテラルはu8などのプレフィックスをつければUnicodeになる
2019/08/30(金) 22:19:54.88ID:BOCgcfAb
試しただけじゃそれが処理系依存の結果かどうかなんて判断できんじゃん
2019/08/30(金) 22:21:51.17ID:Q+0yO3vE
ここで答えもらってもそれが正しい保証がどこにある
2019/08/30(金) 22:23:12.28ID:ZMew/+Uj
コンパイラによって日本語シフトジスなどのマルチバイト文字列の解釈が違って移植の際にトラブることがある。
2019/08/30(金) 22:33:35.27ID:QpJdGFlG
とりあえずリテラルにはu8やuをつけておけば問題ない
2019/08/30(金) 22:39:07.85ID:QcXmSAua
そしてHPUXで悲鳴をあげることに
2019/08/30(金) 22:41:21.90ID:BOCgcfAb
正しい保証はできないかもしれんが間違いは明確だな
2019/08/30(金) 22:53:05.39ID:Okk0GWIA
gccならutf-8だろうけれど、最近のVCはどうだろ。
2019/08/30(金) 23:28:54.53ID:Oe3WNWk3
文字コードの話題は盛り上がっていいね
ある意味一番ハマる部分かも
2019/08/31(土) 01:18:30.00ID:toQMNfCu
u8つければいい
2019/08/31(土) 12:17:38.05ID:WtWTaSD6
char型および文字列リテラルが何になるのか不定なのがアレなので
もうさいしょからu8""とchar8_tとstd::u8stringを使うように徹底するのは良いのかもしれない
2019/08/31(土) 13:49:09.93ID:gI08UaXy
WindowsはTCHARで書くべしみたいなのはまだあるの?
最近Windows使ってないもんでよく分からん
2019/08/31(土) 14:24:18.19ID:6oowjHUQ
昔から自分でオプション変えて好きにしろとしか
2019/08/31(土) 14:25:31.75ID:Jddzk3ii
>>706
でもUTF16の方が問題起きにくい気がする
2019/08/31(土) 15:03:47.82ID:iA1eP3Lu
>>709
ファイルシステム関係は uft16 で、それ以外は utf8 で分けるしかないでしょうね、"ファイルシステム uft16" はやったことがありますが、utf8 はまだ触ったことがありません…
2019/08/31(土) 18:44:11.09ID:IP14yh++
utf8は冗長コードの問題があるから内部処理用コードには向かないんだよね。
2019/08/31(土) 18:47:33.88ID:toQMNfCu
読みこみでハネるのが主流じゃね?
utf16が一番中途半端
2019/08/31(土) 18:54:01.60ID:IP14yh++
そうかな、場合にもよるけど、日常使う文字はほぼutf16に収まるし、
utf8だとstd::regexで日本語がまったくつかえないとかあるしで、
俺的にはutf16の方が便利かな。
2019/08/31(土) 18:58:48.47ID:toQMNfCu
ほぼ収まるってのが一番厄介な所だろ
サロゲートペア対策してなさそう
2019/08/31(土) 19:07:54.35ID:QlojAnpK
日常使う文字こそ今やサロゲートペアだらけなのに🐙
2019/08/31(土) 19:34:37.71ID:oexy9R6b
絵文字はみんなサロゲートペアだもんな
あれのおかげでようやく欧米人どもが真面目にUnicode対応するようになった
2019/08/31(土) 21:17:21.24ID:ny+pXiR9
その代わり新宿ダンジョンよりも複雑奇怪になったけどな
2019/08/31(土) 21:55:55.82ID:OiY9nyzL
絵文字はやめてほしいわ。そもそも架空の文字は登録しないんじゃなかったのかよ。
21bitも使えてコードポイントに余裕があるからといってロクなことしない。
2019/08/31(土) 22:01:23.04ID:WtWTaSD6
足りなくなったらサロゲートペアを足せばいいからなw
2019/09/01(日) 00:01:08.44ID:U3czXmCF
🀄🀄🀄
2019/09/01(日) 18:32:43.72ID:L3u9XotW
もう全部utf32でいいんじゃね 一番簡単だしみんなハッピーや
2019/09/01(日) 19:43:20.80ID:AU7sQxSH
utf32も結合文字が。。
2019/09/01(日) 19:48:05.67ID:UMpnMGJj
で、結局utf8でよくねってなる
2019/09/01(日) 19:58:29.50ID:5ppTYJ/k
いろいろ工夫を凝らし始めるとiso-2022でいいじゃんという
2019/09/01(日) 20:03:47.57ID:ugxLNVG7
う、うん…
2019/09/01(日) 21:56:38.21ID:csfeG7d1
文字列なんか一番基本的な物の一つなんだから
もっと簡単でもよかったのにね
2019/09/01(日) 22:30:33.03ID:XdngnPPu
4byteの配列にコードポイントまんま入れるんだ
結合文字は忘れろ
2019/09/02(月) 00:01:08.82ID:g71KPPKA
コードポイントじゃなくてメモリポインタじゃないの?
2019/09/03(火) 08:08:26.56ID:/7AcGg3i
オブジェクト指向の3大要素をすべて満たしたプログラム作れって課題なんだけど、じゃんけんでいいかな?
2019/09/03(火) 08:58:16.91ID:JzHlK+VD
じゃんけんでメッセージを送る機能が必要になるとは思わないが
2019/09/03(火) 09:00:22.95ID:LV1H9AE4
チャットでいいんじゃね?
画像と文字送れば色々実験できるし
2019/09/03(火) 09:35:35.97ID:/7AcGg3i
チャットかあ
難しそうだな…
2019/09/03(火) 10:27:53.48ID:Hys2x8bh
三大要素って委譲とメッセージとなんか?
2019/09/03(火) 10:35:12.45ID:/7AcGg3i
カプセル化、継承、ポリモーフィズムの3つ
2019/09/03(火) 16:47:41.46ID:WZskrpAp
チャットを作ると

カプセル化:ネットワーク部分、チャット部分
継承:継承元からサーバクラス派生、クライアントクラス派生
仮想:TCPクラス-UDPクラス切り替え

完璧じゃね?
2019/09/03(火) 17:14:42.83ID:xpzn8aWg
別にじゃんけんだっていいだろ

継承:手の種類
多態性:手の画面出力
カプセル化:しわの数
2019/09/03(火) 18:12:16.81ID:S+eQGM/g
タイマーで早出し遅出しの判定とか
ネットワーク対戦機能とか
履歴取ってプレイヤーの手の傾向学習してくるAIとか
色々盛り込んでみればいい
2019/09/03(火) 18:57:18.29ID:7WEfMANz
ちゃんと負けた時はズコーって音声出すんだぞ
2019/09/03(火) 20:42:17.04ID:O03sdIlG
期限が金曜だからあんまり凝ってる時間はないかな。クラス図とシーケンス図とオブジェクト図も作んなきゃいけないし
結局ケイスケホンダのジャンケン作ることにした
2019/09/03(火) 21:36:59.59ID:VgehgunL
>>734
三大要素というとよくそんな風に言われるけど、実のところ継承ってオブジェクトの要素とは
言い難いし、多態も要素というより結果として得られる性質に近いと思うんだよなぁ。
2019/09/03(火) 22:59:40.18ID:29yFlgBG
まあすべては委譲です
というか抽象化のためのパターンです
2019/09/04(水) 09:05:55.41ID:42AhKM7p
>>728
コードポイントで合ってるはず。
文字符号の1つずつの番号の場所をコードポイントと言う。
例えば、ASCIIコードなら、A の文字の番号である 0x41 の占めている
場所みたいなニュアンスがある。
2019/09/04(水) 09:20:24.49ID:42AhKM7p
>>742
追伸。なお、0x41の番号そのもののこともコードポイントと言う。
番号に就いては単に「コード」とも言うが、2019年現在において
単に「コード」と言ってしまうと、プログラムの内の命令が並んでいる
部分のことを指すことが多くて混乱が生じやすいので、文字符合の
番号に対しては、「コード」ではなく「コードポイント」という
ことがある。「文字符号」と言ってしまうと、ShiftJISの体系そのもの、
UnicodeやUTF8の体系そのものを指すことも有り、どうしても曖昧さが残る。
そこで、0x41という番号そのものの事を言っていることを曖昧さなく
示したい場合には、文字符号ではなく「コードポイント」ということがある。
2019/09/04(水) 10:36:53.55ID:BMbMsP6d
int (*exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT;

上記はtypedef struct内に書かれていた関数ポインタの宣言で、
返り値がint、引数が(struct bContext *, struct wmOperator *)の関数ポインタexecなのは分かりますが
最後のATTR_WARN_UNUSED_RESULTって何でしょうか? 関数宣言って引数宣言の後に何か書けましたっけ?
2019/09/04(水) 10:46:36.08ID:3LCw+twW
>>744 https://ja.lmgtfy.com/?q=ATTR_WARN_UNUSED_RESULT
2019/09/04(水) 11:46:27.08ID:peiZ6Bip
今時なら[[nodiscard]]か
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況