前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
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 仕組みが簡潔でドライなシステムを好む人もいるし
もはや把握しきれないカオスなシステムに帰依する人もいる
俺は前者だし、これからもそうありたい
もはや把握しきれないカオスなシステムに帰依する人もいる
俺は前者だし、これからもそうありたい
781デフォルトの名無しさん
2022/09/27(火) 22:51:33.49ID:c5I+FNto カオスは崩壊へと繋がる
ATiのCatalystのようにな
ATiのCatalystのようにな
782デフォルトの名無しさん
2022/09/27(火) 23:37:44.35ID:3EQ0ZEAi 実装とインターフェイスの分離の点でC++が甘いのは
classのメンバー変数がヘッダに書くところ
俺はデフォルトでpimplにしてるけど
classのメンバー変数がヘッダに書くところ
俺はデフォルトでpimplにしてるけど
783デフォルトの名無しさん
2022/09/27(火) 23:55:22.40ID:TrPk/9km >>780
最近の言語はどれもその簡潔な方式だよ
ヘッダファイルとソースファイルは二重管理だからソースファイルに統一
さらにソース付随コメントとドキュメントファイルも統合してソースファイルにのみ記述
シンプルになってる
最近の言語はどれもその簡潔な方式だよ
ヘッダファイルとソースファイルは二重管理だからソースファイルに統一
さらにソース付随コメントとドキュメントファイルも統合してソースファイルにのみ記述
シンプルになってる
784デフォルトの名無しさん
2022/09/28(水) 00:14:01.17ID:SR5jaMok 自動生成みたいなことしても、特に見通しがよくなっとらんと思うんだよね
ヘッダファイルじゃなくてもいいけど、どこかでユーザにインタフェース提示を強制する必要はある気がする
ヘッダファイルじゃなくてもいいけど、どこかでユーザにインタフェース提示を強制する必要はある気がする
785デフォルトの名無しさん
2022/09/28(水) 00:21:27.19ID:2Lj4foK2786デフォルトの名無しさん
2022/09/28(水) 00:52:38.13ID:qgMCZEH2 いや俺はインターフェースは簡潔にヘッダーにまとまってる方が良い
管理が二重になっている云々は同意せんでもないが
同一性はコンパイラがチェックしてくれるので全く問題なし
ドキュメントの自動生成ってリアルタイムに更新してくれるんかいな?
Doxygenみたいなのを想像してるんだが?
管理が二重になっている云々は同意せんでもないが
同一性はコンパイラがチェックしてくれるので全く問題なし
ドキュメントの自動生成ってリアルタイムに更新してくれるんかいな?
Doxygenみたいなのを想像してるんだが?
787デフォルトの名無しさん
2022/09/28(水) 00:54:10.34ID:qgMCZEH2 C++に慣れすぎて実装とインターフェースが混在してるソース見ると
俺は読みたくなくなるんだが?
俺は読みたくなくなるんだが?
788デフォルトの名無しさん
2022/09/28(水) 00:57:52.51ID:ipyGSCwr789デフォルトの名無しさん
2022/09/28(水) 01:57:05.38ID:wKFGQzb0790はちみつ餃子 ◆8X2XSCHEME
2022/09/28(水) 02:35:16.76ID:koSj9wX0 >>768
ヘッダを分けるのは最初は処理系の実装上の都合だったのは事実だと思う。
素朴なオブジェクトファイルは名前とアドレスの組でしか管理していない。
具体的な型をやりとりする仕組みは必要で、それがヘッダファイル。
リンカなどのツールチェインが充実していないのを
コンパイラとプリプロセッサがカバーする形なのでツールチェイン全体が上手く連携できるなら
ヘッダという仕組みは無くても良い。
それはそれとして処理に必要かどうかと言語の表現はまた別問題だ。
原理的に必要かどうかだけで言うならバイナリエディタだけあればプログラムは作れることになってしまうよ。
言語は機械に処理させる以上に人が読み書きする。
もちろんどんな言語が分かり易いかは人によるだろうけども
C++ に満足している C++ ユーザは実装とインターフェイス分離することを利点だと考えている場合は確実に多いよ。
私もそうだし。
ヘッダを分けるのは最初は処理系の実装上の都合だったのは事実だと思う。
素朴なオブジェクトファイルは名前とアドレスの組でしか管理していない。
具体的な型をやりとりする仕組みは必要で、それがヘッダファイル。
リンカなどのツールチェインが充実していないのを
コンパイラとプリプロセッサがカバーする形なのでツールチェイン全体が上手く連携できるなら
ヘッダという仕組みは無くても良い。
それはそれとして処理に必要かどうかと言語の表現はまた別問題だ。
原理的に必要かどうかだけで言うならバイナリエディタだけあればプログラムは作れることになってしまうよ。
言語は機械に処理させる以上に人が読み書きする。
もちろんどんな言語が分かり易いかは人によるだろうけども
C++ に満足している C++ ユーザは実装とインターフェイス分離することを利点だと考えている場合は確実に多いよ。
私もそうだし。
791デフォルトの名無しさん
2022/09/28(水) 05:55:54.63ID:8U6H9Gn3 単にヘッダファイルに慣れていて愛着があるだけです
冷静に考えれば分かります
他の言語はヘッダファイルがなくても機能しています
つまりヘッダファイルは不要なものです
他の言語はヘッダファイル方式を採用しませんでした
つまりヘッダファイルを採用するに値するアドバンテージはありません
冷静に考えれば分かります
他の言語はヘッダファイルがなくても機能しています
つまりヘッダファイルは不要なものです
他の言語はヘッダファイル方式を採用しませんでした
つまりヘッダファイルを採用するに値するアドバンテージはありません
792デフォルトの名無しさん
2022/09/28(水) 08:10:47.02ID:PNF1OAD8 今は必要に応じてIDLを使うようになっているだけじゃない?Protobufぐらいしか知らないけど。
793デフォルトの名無しさん
2022/09/28(水) 08:51:33.64ID:qgMCZEH2794デフォルトの名無しさん
2022/09/28(水) 09:19:16.30ID:H8fqr1nL c#のプロジェクト、実装してから設計起こした様なグダグダなのばっかになってるよね
pythonだとそうはならん気がするけど
pythonだとそうはならん気がするけど
795デフォルトの名無しさん
2022/09/28(水) 22:49:08.92ID:6+yt9OFm obj や lib だけを提供する場合は、ヘッダは絶対に必要かと
他の言語ではどうしていますか?
他の言語ではどうしていますか?
796デフォルトの名無しさん
2022/09/29(木) 03:41:22.05ID:6tct/z4w ヘッダは無くてもいいがある方が便利なときがある
使い回すマクロの定数とか定義とかヘッダに書くのが一般だし
誰かが書いてたけどヘッダファイルに関数の説明とか書くスタイルなら
そこだけ見れば済むようになるし
無くても困らないけど結局は
include xxx.c なんてソースコードを見ることなると思う
使い回すマクロの定数とか定義とかヘッダに書くのが一般だし
誰かが書いてたけどヘッダファイルに関数の説明とか書くスタイルなら
そこだけ見れば済むようになるし
無くても困らないけど結局は
include xxx.c なんてソースコードを見ることなると思う
797デフォルトの名無しさん
2022/09/29(木) 03:46:51.96ID:6tct/z4w798デフォルトの名無しさん
2022/09/29(木) 04:34:33.18ID:MD5zUQsY ラムダ式でコピーキャプチャした変数ってなんでデフォルトで immutable なの?
あとそれに関連してるかもしれないけど、const int a があったとして、a をコピーキャプチャして mutable をつけたラムダ式の中で a を変更しようとすると許されないんだけど、これもなんで?
あとそれに関連してるかもしれないけど、const int a があったとして、a をコピーキャプチャして mutable をつけたラムダ式の中で a を変更しようとすると許されないんだけど、これもなんで?
799デフォルトの名無しさん
2022/09/29(木) 06:34:14.97ID:Jka8tyPG 最初にラムダ入れた時の設計ミス
800デフォルトの名無しさん
2022/09/29(木) 07:34:10.57ID:u1XdWODd ミスか?
俺はGJと思ったぞ
constの逆は欲しかった
明示的に書き込み許可すんの
俺はGJと思ったぞ
constの逆は欲しかった
明示的に書き込み許可すんの
801デフォルトの名無しさん
2022/09/29(木) 08:13:36.08ID:HMWtGy3T >>795
ドキュメントを配る
ドキュメントを配る
802デフォルトの名無しさん
2022/09/29(木) 09:51:48.04ID:r+IaQb6m ヘッダなんて特別なものはなくて
includeディレクティブがあるだけ
includeディレクティブがあるだけ
803デフォルトの名無しさん
2022/09/29(木) 13:54:32.28ID:o1fQB+Qf C++11以前なのでoverride演算子がないソースコードなのですが、
派生クラスでオーバーライドされている関数を簡単に見つける方法って
ありますか?
virtual関数を1つずつgrepするしかないですかね。
派生クラスでオーバーライドされている関数を簡単に見つける方法って
ありますか?
virtual関数を1つずつgrepするしかないですかね。
804デフォルトの名無しさん
2022/09/29(木) 14:30:55.43ID:o/ss6osA >>803 何の前提も無ければ自分がソース持ってないところでオーバーライドされてる可能性もあるので、
いろいろ前提を絞らないと無理かと。
override (「演算子」じゃなくて「キーワード」)があったとしても、付け忘れてる可能性もあるし。
いろいろ前提を絞らないと無理かと。
override (「演算子」じゃなくて「キーワード」)があったとしても、付け忘れてる可能性もあるし。
805デフォルトの名無しさん
2022/09/29(木) 15:19:58.87ID:o1fQB+Qf806デフォルトの名無しさん
2022/09/29(木) 15:27:09.76ID:OAAH5wr1 ヘッダに実装が書かれててもエディタでショートカット1個押して折りたたむだけでインターフェースすぐわかるくね?
807デフォルトの名無しさん
2022/09/29(木) 17:04:17.17ID:nKyEXpsu まっとうならバイナリなりだけ開発環境でインポートすれば、
綺麗にインターフェイスが見える。
綺麗にインターフェイスが見える。
808はちみつ餃子 ◆8X2XSCHEME
2022/09/29(木) 17:12:42.79ID:xXycU9Ev 共有オブジェクト (ダイナミックリンクライブラリ) の段階にまでなってしまうと型は別のところから与える必要があって、
基本的にはビルドの時に型情報を表すなんらかのファイルも生成できるけど、めんどいのは言語をまたぐときなんよね。
Windows API はいろんな言語から使えるような (バインディングの生成元に出来るような) メタデータを提供するという形で
対処しているのでこのへんは Windows API に限らず使いやすいように規格化や環境整備が進むことを期待している。
基本的にはビルドの時に型情報を表すなんらかのファイルも生成できるけど、めんどいのは言語をまたぐときなんよね。
Windows API はいろんな言語から使えるような (バインディングの生成元に出来るような) メタデータを提供するという形で
対処しているのでこのへんは Windows API に限らず使いやすいように規格化や環境整備が進むことを期待している。
809803
2022/09/29(木) 17:14:04.54ID:o1fQB+Qf 今はLinuxでgcc+vimを使っています。
どういう環境なら見えますか?
どういう環境なら見えますか?
810デフォルトの名無しさん
2022/09/29(木) 18:21:37.90ID:YHMprl0j gtagsとか?
811はちみつ餃子 ◆8X2XSCHEME
2022/09/29(木) 21:13:35.71ID:xXycU9Ev >>809
近頃は vim も LSP に対応してるはずだから clangd と合わせて使えばいいんでないの。
わいは vim についてはよう知らんけど VSCode では出来ているから原理的には出来るはず。
近頃は vim も LSP に対応してるはずだから clangd と合わせて使えばいいんでないの。
わいは vim についてはよう知らんけど VSCode では出来ているから原理的には出来るはず。
812デフォルトの名無しさん
2022/09/29(木) 21:39:32.67ID:o1fQB+Qf813デフォルトの名無しさん
2022/09/29(木) 21:44:06.62ID:YHMprl0j 似てねーw
814デフォルトの名無しさん
2022/09/29(木) 21:59:47.36ID:xIdOGMqx ええ…
815デフォルトの名無しさん
2022/10/03(月) 10:37:30.67ID:BGisZcin816デフォルトの名無しさん
2022/10/03(月) 10:40:19.01ID:BGisZcin >>790
template ですね判ります
template ですね判ります
817デフォルトの名無しさん
2022/10/05(水) 11:46:44.33ID:qhw2L+Ej サイズが可変な自作クラスXのvectorを持ちたいとします。
このとき、Xの実体をいくつかvectorに入れて不用意に各要素のサイズを変更すると、メモリの割り当てがおかしくなりますよね?
実体ではなくポインタを持つ以外のワークアラウンドはありますか。
このとき、Xの実体をいくつかvectorに入れて不用意に各要素のサイズを変更すると、メモリの割り当てがおかしくなりますよね?
実体ではなくポインタを持つ以外のワークアラウンドはありますか。
819デフォルトの名無しさん
2022/10/05(水) 12:31:37.02ID:Ghll8vG9 >>817
「サイズが可変なクラス」の簡単な具体例を教えてくれないかしらん?
「サイズが可変なクラス」の簡単な具体例を教えてくれないかしらん?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 毒親「働かないでいつもゴロゴロして!」俺「…」毒親「あっ近隣に熊が出たって!」俺「ふぅ」毒親「どこ行くんだ」
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 生活保護の受給額ってなんでこんなに安いの?
- お前らは“スカイマイルタワー”建設計画を知っているか?
- これ誰か分かるか?
- 支払い詰まってインターネット止まった
