前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
680剛田武
2022/08/25(木) 23:01:36.69ID:JbTCA7nE おお!心の友よ!
お前のものは俺のもの
俺のものは俺のもの
お前のものは俺のもの
俺のものは俺のもの
681デフォルトの名無しさん
2022/08/26(金) 06:21:10.20ID:DLmHAhGr682デフォルトの名無しさん
2022/08/27(土) 07:11:01.12ID:I8td9Ncm ジャイアンはジャイ子の兄だから付いたアダ名
683デフォルトの名無しさん
2022/08/27(土) 14:49:53.46ID:K1QPdrfW >>671
AとBがクラスなら共通のMix-inクラスをAとBでprivate(protected)継承するとか?
AとBがクラスなら共通のMix-inクラスをAとBでprivate(protected)継承するとか?
684デフォルトの名無しさん
2022/08/31(水) 19:31:25.12ID:LmkW4fMO MessageBox()みたいな機能でボタンのテキスト変更できるファンクションありませんか
メッセージが"ぬるぽ"なら[ガッ]のボタンを押したいじゃないですか!
[ はい ]、[ いいえ ]だと"ぬるぽです。ガッする場合は[はい]を押してください"みたいに長々と説明しないといけないので(´・ω・`)
メッセージが"ぬるぽ"なら[ガッ]のボタンを押したいじゃないですか!
[ はい ]、[ いいえ ]だと"ぬるぽです。ガッする場合は[はい]を押してください"みたいに長々と説明しないといけないので(´・ω・`)
685デフォルトの名無しさん
2022/08/31(水) 20:06:27.16ID:HFPaJDap >>684
C++の標準ライブラリにGUIは用意されてないのよ
C++の標準ライブラリにGUIは用意されてないのよ
687デフォルトの名無しさん
2022/08/31(水) 20:40:57.36ID:LmkW4fMO ありがとう調べてみます
688デフォルトの名無しさん
2022/09/01(木) 10:24:37.74ID:0re8NfSH windowsのアプリの話
C++で作成するとランタイムが必要なんですか?
Cならランタイムは不要ですか?
windowsのアプリを作成するとしたらC++とCでどちらの方が良いでしょうか?
C++で作成するとランタイムが必要なんですか?
Cならランタイムは不要ですか?
windowsのアプリを作成するとしたらC++とCでどちらの方が良いでしょうか?
689デフォルトの名無しさん
2022/09/01(木) 10:35:00.87ID:J4auvpO0 ランタイムライブラリはCでも必要
アプリ制作が目的ならC/C++はそもそも向いてないかもしれない
出来なくはないが、そのレベルの質問をするようだと今後苦労するかも
アプリ制作が目的ならC/C++はそもそも向いてないかもしれない
出来なくはないが、そのレベルの質問をするようだと今後苦労するかも
690デフォルトの名無しさん
2022/09/01(木) 10:38:04.37ID:0re8NfSH >>689
ありがと
ありがと
691はちみつ餃子 ◆8X2XSCHEME
2022/09/01(木) 10:47:53.40ID:LhGLll4T >>688
C/C++ のランタイムライブラリの一部は Windows の一部として入っているからその範囲内でならどちらでもあまり関係がない。
ランタイムライブラリの一部はVisual C++ 再頒布可能パッケージとして配布されているものもあるが Windows のバージョンによっては
最初から入ってるとかもあるのでそのあたりの事情は複雑。
バージョンの混乱を避けるならスタティックリンク版を使ったほうが楽だと思う。
Windows のアプリケーションを C で書くのはだいぶんしんどいと思う。
C++ なら楽というわけでもないけど各種フレームワークが C++ を前提にしていたりするので全体としては楽をしやすい可能性が高い。
ただ、言語仕様としては C++ のほうがだいぶん複雑ではあるので言語に対する習熟がどの程度かにもよる。
C/C++ のランタイムライブラリの一部は Windows の一部として入っているからその範囲内でならどちらでもあまり関係がない。
ランタイムライブラリの一部はVisual C++ 再頒布可能パッケージとして配布されているものもあるが Windows のバージョンによっては
最初から入ってるとかもあるのでそのあたりの事情は複雑。
バージョンの混乱を避けるならスタティックリンク版を使ったほうが楽だと思う。
Windows のアプリケーションを C で書くのはだいぶんしんどいと思う。
C++ なら楽というわけでもないけど各種フレームワークが C++ を前提にしていたりするので全体としては楽をしやすい可能性が高い。
ただ、言語仕様としては C++ のほうがだいぶん複雑ではあるので言語に対する習熟がどの程度かにもよる。
692デフォルトの名無しさん
2022/09/01(木) 10:58:27.89ID:0gPlf6MI GDI+ なんかはC++ベースだしな
693デフォルトの名無しさん
2022/09/01(木) 11:08:01.39ID:wgtUDrt5 Runtime と API って結局何が違うん?
694デフォルトの名無しさん
2022/09/01(木) 11:10:18.56ID:wgtUDrt5 GDI+はCからでも使えるよな
695はちみつ餃子 ◆8X2XSCHEME
2022/09/01(木) 11:17:08.19ID:LhGLll4T ランタイムは実行時に使われるライブラリ (およびその他の実行時サポート) で、
API はそれらを呼出すインターフェイスのこと。
ただ、そんなにしっかりした定義があるわけではなくて
スタティックリンクするライブラリのインターフェイスを API と呼ぶかどうかなどは人によるかも?
API の P はプロトコルの P なので独立性の高いモジュールの外部仕様なら
形態にかかわらず API と呼んでいいんじゃないかと個人的には思っているが。
API はそれらを呼出すインターフェイスのこと。
ただ、そんなにしっかりした定義があるわけではなくて
スタティックリンクするライブラリのインターフェイスを API と呼ぶかどうかなどは人によるかも?
API の P はプロトコルの P なので独立性の高いモジュールの外部仕様なら
形態にかかわらず API と呼んでいいんじゃないかと個人的には思っているが。
696デフォルトの名無しさん
2022/09/01(木) 11:27:49.27ID:wgtUDrt5 ntdll.dll とか kernel32.dll は API って感じするけど
それ以外は全部 Runtime で良いんじゃないかとも思う
msvcrt を API かって言われたら絶対違う気がする
それ以外は全部 Runtime で良いんじゃないかとも思う
msvcrt を API かって言われたら絶対違う気がする
697デフォルトの名無しさん
2022/09/01(木) 12:14:02.42ID:NUg6437m Application Programming Interface
698デフォルトの名無しさん
2022/09/01(木) 12:36:35.99ID:GpP6p1Yr APIは「境界面・接点」だから、インターフェイスの向こう側は対象外。
ライブラリは「書庫」なので、中身を含めてライブラリ。
ライブラリは「書庫」なので、中身を含めてライブラリ。
699デフォルトの名無しさん
2022/09/01(木) 12:48:19.96ID:0gPlf6MI ランタイムは、特定の開発手段(GCC, VSなど)に関係する実行環境に持ち込むもの
APIは、特定の操作対象(OS、アプリなど)に関係する関数など
APIは、特定の操作対象(OS、アプリなど)に関係する関数など
700デフォルトの名無しさん
2022/09/01(木) 13:18:41.91ID:epb6+NRn 「ランタイム」って不思議な名前だね
何語かな?
何語かな?
701デフォルトの名無しさん
2022/09/01(木) 13:31:42.39ID:NUg6437m Runtime library
https://en.wikipedia.org/wiki/Runtime_library
https://en.wikipedia.org/wiki/Runtime_library
702デフォルトの名無しさん
2022/09/01(木) 13:39:01.39ID:wgtUDrt5 携帯電話をケータイと略してしまって何のことか判らなくなるのが日本人の本質
703デフォルトの名無しさん
2022/09/01(木) 13:49:12.02ID:epb6+NRn >>701
単なるライブラリじゃん
単なるライブラリじゃん
704デフォルトの名無しさん
2022/09/01(木) 14:00:22.77ID:epb6+NRn >>702
英語だと「mobile」だしそこは日本人に限らない
英語だと「mobile」だしそこは日本人に限らない
705デフォルトの名無しさん
2022/09/01(木) 14:04:08.43ID:oIm36FRE 静的じゃなくて、かつ統合的な機能を提供しとるライブラリという感じ
706デフォルトの名無しさん
2022/09/01(木) 14:06:48.53ID:P/wcDX1Q707はちみつ餃子 ◆8X2XSCHEME
2022/09/01(木) 14:15:18.72ID:LhGLll4T >>702
いや、プログラムから呼び出されるライブラリだけでなく実行時サポートのための機構全般を含めてランタイムという場合もある。
たとえば WebAssembly の仮想機械の実装である wasmtime も "A fast and secure runtime for WebAssembly" と説明されている。
https://wasmtime.dev/
明確な用例を見つけられないんだけど .NET とかでも同じようなニュアンスだったはず……。
いや、プログラムから呼び出されるライブラリだけでなく実行時サポートのための機構全般を含めてランタイムという場合もある。
たとえば WebAssembly の仮想機械の実装である wasmtime も "A fast and secure runtime for WebAssembly" と説明されている。
https://wasmtime.dev/
明確な用例を見つけられないんだけど .NET とかでも同じようなニュアンスだったはず……。
708デフォルトの名無しさん
2022/09/01(木) 14:40:23.38ID:veDjuKDC おまえらは用語の定義とかの話になると生き生きしはじめるな
709デフォルトの名無しさん
2022/09/01(木) 14:46:45.68ID:PGNFrqcy それがプログラマに大事な資質の一つだからまあ
710デフォルトの名無しさん
2022/09/01(木) 15:06:04.82ID:X5eV6Z9e WebAPI はどうでもいいとして
Win32API 以前は API ってあんまり聴かんかった気がする
もし時代が時代なら C Runtime は Console API とか
System Call API とか名付けられていたんじゃまいか
Win32API 以前は API ってあんまり聴かんかった気がする
もし時代が時代なら C Runtime は Console API とか
System Call API とか名付けられていたんじゃまいか
711デフォルトの名無しさん
2022/09/01(木) 15:13:38.12ID:epb6+NRn Linux界隈でもランタイムって用語は
あんまり馴染みない気がする
あんまり馴染みない気がする
712はちみつ餃子 ◆8X2XSCHEME
2022/09/01(木) 15:45:49.43ID:LhGLll4T ランタイム (実行時) という語をあてはめる以上は静的ではないというニュアンスが感じられるし、
ダイナミックリンクされるもの全般をふんわりとそう呼び始めたとかではないかなぁ。
あくまでも想像の域を出ないけど。
>710
それはどうだろう。
C ランタイムはコンソールの操作だけを司るわけではないし、ほとんどの関数はシステムコールしない。
あくまでも C という言語の事情に強く結びついているのでランタイムとは呼ばれなかったとしても
C ナントカという名前にはなったんじゃないかな。
ダイナミックリンクされるもの全般をふんわりとそう呼び始めたとかではないかなぁ。
あくまでも想像の域を出ないけど。
>710
それはどうだろう。
C ランタイムはコンソールの操作だけを司るわけではないし、ほとんどの関数はシステムコールしない。
あくまでも C という言語の事情に強く結びついているのでランタイムとは呼ばれなかったとしても
C ナントカという名前にはなったんじゃないかな。
713デフォルトの名無しさん
2022/09/01(木) 16:33:34.64ID:X5eV6Z9e stdc
714デフォルトの名無しさん
2022/09/01(木) 17:32:56.24ID:pvebLOMF libc
715デフォルトの名無しさん
2022/09/01(木) 17:56:44.20ID:6yN4NXnZ libgcc
716デフォルトの名無しさん
2022/09/01(木) 20:14:05.79ID:IftgsB+t DOSの頃はINT21hのシステムコールだしな。
描画はVRAM直だし。
APIと言うより割り込みだな。
描画はVRAM直だし。
APIと言うより割り込みだな。
717デフォルトの名無しさん
2022/09/01(木) 21:31:42.28ID:2+rvldGI APIという言葉からは、実装を絶対に見せたくないという強い意志のようなものを感じる
718デフォルトの名無しさん
2022/09/01(木) 23:17:08.92ID:X5eV6Z9e oppapi
719デフォルトの名無しさん
2022/09/01(木) 23:26:48.72ID:JiwZvitn A(あんまり) P(ぱっとしな) I(い)
720はちみつ餃子 ◆8X2XSCHEME
2022/09/02(金) 00:07:28.67ID:4QwPhwTb >>716
DOS の用語ではファンクションコールじゃなかったっけ……
と思って資料を読み返したらなんだかあまり統一されてない感じだった。
ファンクションリクエストという用語を使っている場合もある。
当時の用語の混乱は置いといて、現代的にには
機械語レベルでの値の受け渡しやメモリの配置は ABI で決めるべきことで
API はその上に構築される高レイヤな概念と解される場合が多いと思う。
ソフトウェア割込みを使うという規約は ABI に属して、
どのような値を渡してどんな効果があるかは API に属すと考えるべきじゃないかな。
DOS の用語ではファンクションコールじゃなかったっけ……
と思って資料を読み返したらなんだかあまり統一されてない感じだった。
ファンクションリクエストという用語を使っている場合もある。
当時の用語の混乱は置いといて、現代的にには
機械語レベルでの値の受け渡しやメモリの配置は ABI で決めるべきことで
API はその上に構築される高レイヤな概念と解される場合が多いと思う。
ソフトウェア割込みを使うという規約は ABI に属して、
どのような値を渡してどんな効果があるかは API に属すと考えるべきじゃないかな。
721デフォルトの名無しさん
2022/09/02(金) 07:20:17.05ID:gHt2MaJh メインフレームではSVC
DIAGNOSEを使う馬合もあるけど
DIAGNOSEを使う馬合もあるけど
722デフォルトの名無しさん
2022/09/02(金) 09:12:32.54ID:K5Jq4B80 こんなのがあったんだけど
https://qiita.com/purigen/items/d68b146f341c41d260fc
c = c = testString.find_first_of(" ")
これってなんで2回も代入してりゅの???わからにゃいよ
https://qiita.com/purigen/items/d68b146f341c41d260fc
c = c = testString.find_first_of(" ")
これってなんで2回も代入してりゅの???わからにゃいよ
723デフォルトの名無しさん
2022/09/02(金) 09:43:01.10ID:tSjdGUVq 誤植でしょ
724デフォルトの名無しさん
2022/09/02(金) 10:15:17.31ID:K5Jq4B80 そっか誤植か〜
わかったニャン☆
わかったニャン☆
725デフォルトの名無しさん
2022/09/02(金) 10:29:24.82ID:J900FDad Win32の頃はint2ehのだしな
描画はシステムメモリに書いてbitbltだし
APIと言うより割り込み棚
描画はシステムメモリに書いてbitbltだし
APIと言うより割り込み棚
726デフォルトの名無しさん
2022/09/02(金) 12:14:46.88ID:2iQGHF2d g++で以下の警告のようなメッセージ(`note')が出るのですが
これは何を意味しているのでしょうか?
コンパイラはaarch64-linux-gnu-g++-10で
オプション-std=c++14に変えるとメッセージは出ません
またx86_64-linux-gnu-g++-10でコンパイルすると
-std=c++17でも-std=c++14でもメッセージは出ません
恐らくC++の規格の問題だと思いますのでこちらに書かせて頂きます
$ cat test.cpp
#include <cmath>
#include <utility>
using namespace std;
pair <double, double>
hoge (double p_x, double p_y)
{
return make_pair (p_x, p_y);
}
int main () {return 0;}
$ g++ -std=c++17 test.cpp
test.cpp: In function ‘std::pair<double, double> hoge(double, double)’:
test.cpp:6:29: note: parameter passing for argument of type ‘std::pair<double, double>’ when C++17 is enabled changed to match C++14 in GCC 10.1
6 | hoge (double p_x, double p_y)
| ^
これは何を意味しているのでしょうか?
コンパイラはaarch64-linux-gnu-g++-10で
オプション-std=c++14に変えるとメッセージは出ません
またx86_64-linux-gnu-g++-10でコンパイルすると
-std=c++17でも-std=c++14でもメッセージは出ません
恐らくC++の規格の問題だと思いますのでこちらに書かせて頂きます
$ cat test.cpp
#include <cmath>
#include <utility>
using namespace std;
pair <double, double>
hoge (double p_x, double p_y)
{
return make_pair (p_x, p_y);
}
int main () {return 0;}
$ g++ -std=c++17 test.cpp
test.cpp: In function ‘std::pair<double, double> hoge(double, double)’:
test.cpp:6:29: note: parameter passing for argument of type ‘std::pair<double, double>’ when C++17 is enabled changed to match C++14 in GCC 10.1
6 | hoge (double p_x, double p_y)
| ^
727デフォルトの名無しさん
2022/09/02(金) 13:54:12.27ID:gHt2MaJh 俺んとこでは -std=c++98 でも何も言ってこない
バージョンは g++ (Rev5, Built by MSYS2 project) 10.3.0
Microsoft(R) C/C++ Optimizing Compiler Version 19.33.31629 for x64 で /W4 にしても何も言ってこない
バージョンは g++ (Rev5, Built by MSYS2 project) 10.3.0
Microsoft(R) C/C++ Optimizing Compiler Version 19.33.31629 for x64 で /W4 にしても何も言ってこない
728デフォルトの名無しさん
2022/09/02(金) 14:42:37.96ID:E472VNc+729はちみつ餃子 ◆8X2XSCHEME
2022/09/02(金) 14:46:58.07ID:4QwPhwTb730デフォルトの名無しさん
2022/09/02(金) 15:04:43.31ID:2iQGHF2d731はちみつ餃子 ◆8X2XSCHEME
2022/09/02(金) 15:06:04.63ID:4QwPhwTb >>730
いや、エラーメッセージでググったら stackoverflow で背景の説明をしてるのが見つかったぞ。
いや、エラーメッセージでググったら stackoverflow で背景の説明をしてるのが見つかったぞ。
732デフォルトの名無しさん
2022/09/02(金) 18:13:40.07ID:/OwM2R8K ω株 PI.3.14
733デフォルトの名無しさん
2022/09/13(火) 14:35:12.50ID:pQsEVmxh OSの板で聞くべきかもしらんが、終了シグナル受け取ったらメモリの中身を書き出して中断し、再びコマンドが叩かれたらメモリの中身を読み込んで途中から再開するみたいな仕組みを一番簡単にやる方法ってどんなですかね?
チェックポイント・リスタートっていうんでしょうか
チェックポイント・リスタートっていうんでしょうか
734はちみつ餃子 ◆8X2XSCHEME
2022/09/13(火) 15:19:18.69ID:w3MhG8uL >>733
Linux とか BSD で昔はメモリをダンプするシステムコールがあったはずだが廃止されたんじゃなかったっけ。
Emacs でそのシステムコールを使ってたから色々とゴタゴタしたような記憶がある。
(そのシステムコールの名前が思い出せない……。 すまぬ。)
再開に必要な情報を適当にシリアライズして書き出すしかしょうがないんじゃないの。
Linux とか BSD で昔はメモリをダンプするシステムコールがあったはずだが廃止されたんじゃなかったっけ。
Emacs でそのシステムコールを使ってたから色々とゴタゴタしたような記憶がある。
(そのシステムコールの名前が思い出せない……。 すまぬ。)
再開に必要な情報を適当にシリアライズして書き出すしかしょうがないんじゃないの。
735デフォルトの名無しさん
2022/09/13(火) 23:44:43.38ID:Vl/J6nKl やったことないけどgdbでできそうな気はする
736デフォルトの名無しさん
2022/09/14(水) 01:15:05.96ID:o/NVybOh ptraceは無敵
737デフォルトの名無しさん
2022/09/22(木) 16:50:54.43ID:MKlA3Ol3 おはこんばんわ
何度もお世話になっておりますが、今回も皆様のお知恵をお借りしたく書き込みをしております。
初歩的な質問かもしれませんが質問させてください!
私の質問は、動的な任意型を戻り値とする関数を作ることは可能でしょうか??という事です。
したい事は、
template <typename T>
T ret(int arg)
{
If(arg==0)return static_cast<hoge>(arg);
else if(arg==1)return static_cast<hage>(arg);
}
でホゲ型とホラン千秋型を引数によって変化させて返却したいのです……が、
私が見ても無理そうな感じなのです。ニパー
そもそもテンプレートってコンパイル時点で推察できないと無理ですよね?
この悩みに何か方法や別解があったりしたら教えていただきたく、スレ汚しを失礼しております。
感謝は先に申し上げておきます。
ありがとうございます!
何度もお世話になっておりますが、今回も皆様のお知恵をお借りしたく書き込みをしております。
初歩的な質問かもしれませんが質問させてください!
私の質問は、動的な任意型を戻り値とする関数を作ることは可能でしょうか??という事です。
したい事は、
template <typename T>
T ret(int arg)
{
If(arg==0)return static_cast<hoge>(arg);
else if(arg==1)return static_cast<hage>(arg);
}
でホゲ型とホラン千秋型を引数によって変化させて返却したいのです……が、
私が見ても無理そうな感じなのです。ニパー
そもそもテンプレートってコンパイル時点で推察できないと無理ですよね?
この悩みに何か方法や別解があったりしたら教えていただきたく、スレ汚しを失礼しております。
感謝は先に申し上げておきます。
ありがとうございます!
738デフォルトの名無しさん
2022/09/22(木) 17:27:40.84ID:vBAk//C3 >>737
一般的には型システムの健全性と安全性のために
そのような用途では代数的データ型(タグ付き共用体)を用いる
C++ではstd::variantであるがパターンマッチングなどの言語サポートがないため若干扱いにくい
一般的には型システムの健全性と安全性のために
そのような用途では代数的データ型(タグ付き共用体)を用いる
C++ではstd::variantであるがパターンマッチングなどの言語サポートがないため若干扱いにくい
739はちみつ餃子 ◆8X2XSCHEME
2022/09/22(木) 19:28:31.52ID:He0eupRY >>737
実行時の多相は抽象クラスを使うのが基本ということになってる。
その場合で言えば hoge と hage が共通のインターフェイスを持つ (抽象クラスを継承する) ようにクラス設計するのが普通。
まずは抽象クラスを学んでみて。
最初からクラス設計に関与することが出来ない場合 (既存のライブラリなので手を加えられないなど)
に動的に切り替える必要があるなら std::variant や std::any が使えるのだけれど……
使う箇所で元の型にキャストしなおしたり、 std::visit を経由したりで煩雑になりがち。
実行時の多相は抽象クラスを使うのが基本ということになってる。
その場合で言えば hoge と hage が共通のインターフェイスを持つ (抽象クラスを継承する) ようにクラス設計するのが普通。
まずは抽象クラスを学んでみて。
最初からクラス設計に関与することが出来ない場合 (既存のライブラリなので手を加えられないなど)
に動的に切り替える必要があるなら std::variant や std::any が使えるのだけれど……
使う箇所で元の型にキャストしなおしたり、 std::visit を経由したりで煩雑になりがち。
740デフォルトの名無しさん
2022/09/22(木) 21:37:36.04ID:PsWl+Otb anyってstdに入ってるんだ!
741デフォルトの名無しさん
2022/09/22(木) 22:12:16.21ID:PsWl+Otb742はちみつ餃子 ◆8X2XSCHEME
2022/09/22(木) 22:27:10.41ID:He0eupRY >>740
入ったのは C++17 だし、あまり積極的には使わない種類のものだから目立たないよな……
入ったのは C++17 だし、あまり積極的には使わない種類のものだから目立たないよな……
743デフォルトの名無しさん
2022/09/23(金) 00:25:25.16ID:LrToOuio any使えばクソコードは書けるがw
#include <iostream>
#include <any>
using namespace std;
struct hoge {
int value_;
hoge (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
struct hage {
int value_;
hage (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
std::any ret(int arg)
{
if(arg==0)return hoge (arg);
else if(arg==1)return hage (arg);
return std::any ();
}
int main () {
try {
any_cast <hoge> (ret (0)).output (cout) << endl;
any_cast <hage> (ret (1)).output (cout) << endl;
any_cast <hoge> (ret (1)).output (cout) << endl; // An exception will be thrown.
} catch (const std::bad_any_cast &) {
cerr << "std::bad_any_cast\n";
return -1;
}
return 0;
}
#include <iostream>
#include <any>
using namespace std;
struct hoge {
int value_;
hoge (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
struct hage {
int value_;
hage (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
std::any ret(int arg)
{
if(arg==0)return hoge (arg);
else if(arg==1)return hage (arg);
return std::any ();
}
int main () {
try {
any_cast <hoge> (ret (0)).output (cout) << endl;
any_cast <hage> (ret (1)).output (cout) << endl;
any_cast <hoge> (ret (1)).output (cout) << endl; // An exception will be thrown.
} catch (const std::bad_any_cast &) {
cerr << "std::bad_any_cast\n";
return -1;
}
return 0;
}
744デフォルトの名無しさん
2022/09/23(金) 02:10:00.16ID:gD4It3Ab Python や tcl のコードだな
745デフォルトの名無しさん
2022/09/23(金) 02:31:56.65ID:LrToOuio argがコンパイル時に決まってるなら例えば以下の通りにディスパッチ
Loki::Int2Typeって今はC++に入ってるっけ?
#include <iostream>
using namespace std;
namespace Loki {
template <int v>
struct Int2Type {
enum { value = v };
};
}
struct hoge {
int value_;
hoge (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
struct hage {
int value_;
hage (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
hoge ret(Loki::Int2Type <0> p){return hoge (Loki::Int2Type <0>::value);}
hage ret(Loki::Int2Type <1> p){return hage (Loki::Int2Type <1>::value);}
int main () {
ret (Loki::Int2Type <0> ()).output (cout) << endl;
ret (Loki::Int2Type <1> ()).output (cout) << endl;
return 0;
}
Loki::Int2Typeって今はC++に入ってるっけ?
#include <iostream>
using namespace std;
namespace Loki {
template <int v>
struct Int2Type {
enum { value = v };
};
}
struct hoge {
int value_;
hoge (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
struct hage {
int value_;
hage (int arg): value_ (arg) {}
std::ostream &output (std::ostream &os) {return os << value_;}
};
hoge ret(Loki::Int2Type <0> p){return hoge (Loki::Int2Type <0>::value);}
hage ret(Loki::Int2Type <1> p){return hage (Loki::Int2Type <1>::value);}
int main () {
ret (Loki::Int2Type <0> ()).output (cout) << endl;
ret (Loki::Int2Type <1> ()).output (cout) << endl;
return 0;
}
746デフォルトの名無しさん
2022/09/23(金) 17:57:04.27ID:tVlOtcCS747デフォルトの名無しさん
2022/09/23(金) 18:13:00.58ID:MklXD0R7 そういう用途でタグ無しunionは危険で不便な昔の遺物
どの言語でも安全で便利なタグ付きunionを用いる
C++はパターンマッチングが弱いのでそこを改善すればさらに便利になるはずだ
どの言語でも安全で便利なタグ付きunionを用いる
C++はパターンマッチングが弱いのでそこを改善すればさらに便利になるはずだ
748デフォルトの名無しさん
2022/09/23(金) 19:52:56.72ID:Ztvb6Y4W 無名の共用体
anonymous union
anonymous union
749デフォルトの名無しさん
2022/09/23(金) 23:41:53.30ID:icgBEU6J anonymous union というとなにかこう、不穏なひびきがあるな
集団で徒党をくんでハッキングする的な
集団で徒党をくんでハッキングする的な
750デフォルトの名無しさん
2022/09/24(土) 00:05:53.42ID:G+JpnkhJ そもそも文脈なしのunionって労働組合だからもともと不穏な響きの単語
751デフォルトの名無しさん
2022/09/24(土) 00:18:57.85ID:JL9pTOdW ネトウヨ現る
752デフォルトの名無しさん
2022/09/24(土) 00:38:49.83ID:Pnjq2Ki8 Union Jack
753デフォルトの名無しさん
2022/09/24(土) 00:38:55.02ID:NrutJXN/ 「集団」で「徒党」を組むって
754デフォルトの名無しさん
2022/09/24(土) 20:29:13.36ID:7pBAspe1 Visual Studio Community おそろしあ
755デフォルトの名無しさん
2022/09/24(土) 22:05:06.81ID:51wpUqA8 チューリンからメール北?
756デフォルトの名無しさん
2022/09/26(月) 08:57:53.30ID:Fzzl8jy0 >>751
何が見えてるの…
何が見えてるの…
757デフォルトの名無しさん
2022/09/26(月) 21:36:36.83ID:T6INyDl8 ちょっとわからなくなってきたため良ければ教えてください。
他言語を使用していて強く感じることですが、.hと.cppを行ったり来たりする開発スタイルがかなり面倒に感じます。
ヘッダに実装を書いても普通にビルド出来てしまうため個人的な開発はヘッダオンリで済ませています。
何番煎じの話かもしれませんが、分割するしないでのメリット・デメリットを教えてください。
他言語を使用していて強く感じることですが、.hと.cppを行ったり来たりする開発スタイルがかなり面倒に感じます。
ヘッダに実装を書いても普通にビルド出来てしまうため個人的な開発はヘッダオンリで済ませています。
何番煎じの話かもしれませんが、分割するしないでのメリット・デメリットを教えてください。
758デフォルトの名無しさん
2022/09/26(月) 21:41:04.85ID:yuD7kgln 再コンパイルコストとインターフェイスと実装の分離
hに全部書いてしまうと、それの変更があった場合にincludeするすべてのファイルで再コンパイルが走り、時間がかかるようになる
hに全部書くため、変更の機会も当然多くなり、頻繁にビルド待ちの状態になるのは避けたい
インターフェイスと実装を分離しておくことは、保守や共有の最、理解を早くするという点で有用
どっちの話も大規模になると効いてくる話なので、小規模開発なら全部.hに書くスタイルでも構わないとは思う
hに全部書いてしまうと、それの変更があった場合にincludeするすべてのファイルで再コンパイルが走り、時間がかかるようになる
hに全部書くため、変更の機会も当然多くなり、頻繁にビルド待ちの状態になるのは避けたい
インターフェイスと実装を分離しておくことは、保守や共有の最、理解を早くするという点で有用
どっちの話も大規模になると効いてくる話なので、小規模開発なら全部.hに書くスタイルでも構わないとは思う
759はちみつ餃子 ◆8X2XSCHEME
2022/09/27(火) 09:30:59.47ID:ozjafOA0 >>757
C の延長線上でなんとかしてきた C++ の言語仕様があんまり良くないんだよ……。
実装とインターフェイスを分けるのはカプセル化の観点からも好ましいのだけれど
C++ ではテンプレートを処理する都合上でこの分離が破綻しているので
そこらへんはまあ運用の工夫で……みたいな微妙な機微がある。
どうにもならんのがわかってるから新しい C++ ではようやくモジュールが導入された。
C の延長線上でなんとかしてきた C++ の言語仕様があんまり良くないんだよ……。
実装とインターフェイスを分けるのはカプセル化の観点からも好ましいのだけれど
C++ ではテンプレートを処理する都合上でこの分離が破綻しているので
そこらへんはまあ運用の工夫で……みたいな微妙な機微がある。
どうにもならんのがわかってるから新しい C++ ではようやくモジュールが導入された。
760デフォルトの名無しさん
2022/09/27(火) 09:41:59.52ID:ZJUDc1gE FILE * は使っても
struct FILE の中身なんて知らなくて良いからな
使うだけなら void * で充分
struct FILE の中身なんて知らなくて良いからな
使うだけなら void * で充分
761デフォルトの名無しさん
2022/09/27(火) 11:09:05.55ID:HLZr1vWv c#みたいにヘッダ無いのが良いことだとは思えんのだよなあ
762デフォルトの名無しさん
2022/09/27(火) 11:20:16.93ID:XJRFtCjW C#だけでなく今世紀のプログラミング言語は全てヘッダファイルなんて無いんじゃない?
不要なものなんだと思うよ
不要なものなんだと思うよ
763デフォルトの名無しさん
2022/09/27(火) 11:28:04.52ID:dmYM9sG7 .hppって拡張子でヘッダに処理を書いてるのを見たことある
764はちみつ餃子 ◆8X2XSCHEME
2022/09/27(火) 14:13:36.82ID:ozjafOA0 >>763
.hpp は C++ のヘッダとしてはありふれた拡張子。 定義を書くかどうかとは関係なく使われるよ。
昔は .hxx とか .h++ とかもあったし、テンプレートが含まれるヘッダには .tcc と付ける習慣が一部にはあった。
大文字で .H とか付けてるのも有ったけどファイルシステムによっては大文字と小文字が区別されないから早い内に廃れたと思う。
C と共用できるように書かれたヘッダを除いては .h という拡張子は避けたほうが運用しやすいと思うんだが、
そこらへんの考え方も慣例が確立していなくてなんだかグダグダなんだよなぁ。
.hpp は C++ のヘッダとしてはありふれた拡張子。 定義を書くかどうかとは関係なく使われるよ。
昔は .hxx とか .h++ とかもあったし、テンプレートが含まれるヘッダには .tcc と付ける習慣が一部にはあった。
大文字で .H とか付けてるのも有ったけどファイルシステムによっては大文字と小文字が区別されないから早い内に廃れたと思う。
C と共用できるように書かれたヘッダを除いては .h という拡張子は避けたほうが運用しやすいと思うんだが、
そこらへんの考え方も慣例が確立していなくてなんだかグダグダなんだよなぁ。
765デフォルトの名無しさん
2022/09/27(火) 18:54:18.35ID:vGdotfW0 >>763
template主体ならhppにガッツリ書いてたけど、ちな、どこに書くの?
template主体ならhppにガッツリ書いてたけど、ちな、どこに書くの?
766デフォルトの名無しさん
2022/09/27(火) 19:06:22.22ID:c5I+FNto ヘッダはテンプレートでごちゃごちゃしてなければどんな構造してるのかパッと見で分かりやすい
767デフォルトの名無しさん
2022/09/27(火) 19:11:23.36ID:3EQ0ZEAi ヘッダに実装書く必要がある場合は
俺はインターフェース用ヘッダと実装用ヘッダに分けてるな
ヘッダには本来インターフェースのみが簡潔に書かれているのが望ましいと思う
俺はインターフェース用ヘッダと実装用ヘッダに分けてるな
ヘッダには本来インターフェースのみが簡潔に書かれているのが望ましいと思う
768デフォルトの名無しさん
2022/09/27(火) 20:14:12.91ID:eLTt/hKm 他のプログラミング言語はヘッダファイルが無くても困っていないから
ヘッダファイルは大昔当時のCコンパイラがサボるために用意しただけの本来は要らない子なんじゃ?
ヘッダファイルは大昔当時のCコンパイラがサボるために用意しただけの本来は要らない子なんじゃ?
769デフォルトの名無しさん
2022/09/27(火) 20:35:59.29ID:c5I+FNto ソース公開出来ないようなハード実装ライブラリを隠蔽して提供するためにはヘッダは必須項目
770デフォルトの名無しさん
2022/09/27(火) 20:41:17.15ID:WqTtjjk3771デフォルトの名無しさん
2022/09/27(火) 20:49:31.24ID:3EQ0ZEAi772デフォルトの名無しさん
2022/09/27(火) 21:01:15.67ID:uWssz7Bg >>771
時代遅れすぎだろw
今はそんなヘッダファイルを見なくても
ヘッダファイルが存在しなくても
ソースファイルから自動抽出されたもっと見やすい表示や生成ドキュメントを見る
だからC/C++以外はヘッダファイルなんて存在しない
時代遅れすぎだろw
今はそんなヘッダファイルを見なくても
ヘッダファイルが存在しなくても
ソースファイルから自動抽出されたもっと見やすい表示や生成ドキュメントを見る
だからC/C++以外はヘッダファイルなんて存在しない
773デフォルトの名無しさん
2022/09/27(火) 21:05:03.18ID:3EQ0ZEAi >>772
>ソースファイルから自動抽出されたもっと見やすい表示や生成ドキュメントを見る
それはヘッダがないから仕方なくなのではないかな?
C++でも自動抽出ツールされたドキュメントを見ても良いのだよ
>ソースファイルから自動抽出されたもっと見やすい表示や生成ドキュメントを見る
それはヘッダがないから仕方なくなのではないかな?
C++でも自動抽出ツールされたドキュメントを見ても良いのだよ
774デフォルトの名無しさん
2022/09/27(火) 21:08:18.80ID:j15wYqDV >>773
つまりヘッダファイルの必要性はない、との結論になりますな
つまりヘッダファイルの必要性はない、との結論になりますな
775デフォルトの名無しさん
2022/09/27(火) 21:10:16.49ID:3EQ0ZEAi ならない
776はちみつ餃子 ◆8X2XSCHEME
2022/09/27(火) 21:23:27.93ID:ozjafOA0 実装とインターフェイスを分離するという根本思想自体はよかったと思う。
それを実現するためにプリプロセッサで単純にヘッダをはめ込むというのは雑すぎるやり方だとも思う。
それを実現するためにプリプロセッサで単純にヘッダをはめ込むというのは雑すぎるやり方だとも思う。
777デフォルトの名無しさん
2022/09/27(火) 21:36:37.50ID:D5WhN1Dz 他の言語はヘッダ無くても何も困っていないから
本質的にはヘッダは不要物なのだと思われる
本質的にはヘッダは不要物なのだと思われる
778デフォルトの名無しさん
2022/09/27(火) 22:23:04.59ID:vPBo+Ol+ マルチパスコンパイルするオプションがコンパイラにあればいいのにね
779デフォルトの名無しさん
2022/09/27(火) 22:28:17.08ID:TG8VJWwA >>777
古い bcc には、確かヘッダを自動抽出するオプションがあった気がする
古い bcc には、確かヘッダを自動抽出するオプションがあった気がする
780デフォルトの名無しさん
2022/09/27(火) 22:39:41.48ID:EwsxhlHO 仕組みが簡潔でドライなシステムを好む人もいるし
もはや把握しきれないカオスなシステムに帰依する人もいる
俺は前者だし、これからもそうありたい
もはや把握しきれないカオスなシステムに帰依する人もいる
俺は前者だし、これからもそうありたい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★3 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 小野田氏、”中国経済への依存“に警戒感 高市首相の国会答弁巡り [煮卵★]
- 【サッカー】独占入手 最年長JリーガーにW不倫疑惑 『お風呂覗きたいんですが笑』LINE流出も… 慰謝料トラブルを本人に直撃 [冬月記者★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 【なぜ】安倍晋三の評価、地味に上がってる模様… [343591364]
- 【画像】セクシー女優・天沢りんさん「お休み頂いてた半年間でこんな体になりました🪽🤍」👉予想通りの展開に [242521385]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- とうすこ🏡愛され絵文字♡🤥👊😅👊👶♡
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
