前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
探検
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
612デフォルトの名無しさん
2022/08/19(金) 00:47:36.81ID:SM6rQCcv613デフォルトの名無しさん
2022/08/19(金) 01:36:44.63ID:Iq0pX04r614デフォルトの名無しさん
2022/08/19(金) 01:38:01.85ID:M+KL048w なんでポインタ使うんですか?
615デフォルトの名無しさん
2022/08/19(金) 02:09:43.59ID:SM6rQCcv >>613
その書いている「参照」ってのはC++の参照ではないですよね?
関数にT型のオブジェクトを引数として渡すとき
関数がシーケンシャルに実行されるなら原則としてT &で渡す
中身が無効値である可能性があるならunique_ptr <T> &で渡す
関数が並行に実行されるならshared_ptr <T>を渡す
その書いている「参照」ってのはC++の参照ではないですよね?
関数にT型のオブジェクトを引数として渡すとき
関数がシーケンシャルに実行されるなら原則としてT &で渡す
中身が無効値である可能性があるならunique_ptr <T> &で渡す
関数が並行に実行されるならshared_ptr <T>を渡す
616デフォルトの名無しさん
2022/08/19(金) 03:25:13.02ID:oQfRblXd T&渡した時にそれが他へ転用され保持されて生き残り続ける可能性を考慮しないの?
617デフォルトの名無しさん
2022/08/19(金) 05:39:15.80ID:HCuI/gXC 静的試験を絶対視するなーんにも分かっとらんやつが推すほどイメージが悪くなるな
618デフォルトの名無しさん
2022/08/19(金) 07:27:50.77ID:QMISJLeV619デフォルトの名無しさん
2022/08/19(金) 08:01:50.73ID:slQGFe9J620デフォルトの名無しさん
2022/08/19(金) 08:25:03.05ID:SM6rQCcv >>616
は? 詳しく
は? 詳しく
621デフォルトの名無しさん
2022/08/19(金) 08:45:24.08ID:xzucV8hS >>597
constructor destructor関数オブジェクトを用意すれば良かったんじゃなかったっけ?smart ptrの典型的な応用例だから、調べりゃすぐ出てくるよ。
constructor destructor関数オブジェクトを用意すれば良かったんじゃなかったっけ?smart ptrの典型的な応用例だから、調べりゃすぐ出てくるよ。
622デフォルトの名無しさん
2022/08/19(金) 08:56:07.71ID:HCuI/gXC >>619
ふーんチェックなのかpgr
ふーんチェックなのかpgr
623デフォルトの名無しさん
2022/08/19(金) 10:22:48.97ID:51hioa9S >>617
俺も以前はそう思っていたんだけど
わずかな補助情報を人間が与えるだけで
Rustコンパイラが静的試験してくれて
人間にとって面倒かつ慎重さを必要とする作業から解放してくれるのを知って考えが変わった
例えて言うなら
動的型付け言語を使っていたところを
わずかな型情報を人間が与えるだけで
静的型付け言語のコンパイラが静的試験をしてくれるようになったのと似てる
俺も以前はそう思っていたんだけど
わずかな補助情報を人間が与えるだけで
Rustコンパイラが静的試験してくれて
人間にとって面倒かつ慎重さを必要とする作業から解放してくれるのを知って考えが変わった
例えて言うなら
動的型付け言語を使っていたところを
わずかな型情報を人間が与えるだけで
静的型付け言語のコンパイラが静的試験をしてくれるようになったのと似てる
624はちみつ餃子 ◆8X2XSCHEME
2022/08/19(金) 11:08:02.29ID:FT/EuRcZ 昔とはソフトウェアの規模感が違う。
そしてプログラミングするのがプログラミングの専門化とは限らない領域が増えた。
(いわゆるエンドユーザー・コンピューティング)
職業的なプログラマにしてもプログラミングの専門化というよりは
別分野のそれぞれの専門化が道具としてのプログラムを作るというような場合も多い。
プログラミングのルールや作法を行きわたらせることは出来ないよ。
検査を強くするのは時代的な背景としても自然に思える。
動的な検査でも静的な検査でもいいが、
C/C++ は検査せずに未定義に突入するのがあまりにも簡単すぎる。
そしてプログラミングするのがプログラミングの専門化とは限らない領域が増えた。
(いわゆるエンドユーザー・コンピューティング)
職業的なプログラマにしてもプログラミングの専門化というよりは
別分野のそれぞれの専門化が道具としてのプログラムを作るというような場合も多い。
プログラミングのルールや作法を行きわたらせることは出来ないよ。
検査を強くするのは時代的な背景としても自然に思える。
動的な検査でも静的な検査でもいいが、
C/C++ は検査せずに未定義に突入するのがあまりにも簡単すぎる。
625デフォルトの名無しさん
2022/08/19(金) 11:09:58.15ID:HCuI/gXC >>623
ナマポひとつロクに扱いきれないスキルと
動的チェックなんて恥ずかしげもなく言っちゃう
バカ用言語があんたにとって有難いのは分かったよ
ここはC++相談室
C++という土俵に立っている者の場だ
落ちこぼれて逃げ出したやつの遠吠えは
誰も聞きたがってない
どっか行け、邪魔なんだよ
ナマポひとつロクに扱いきれないスキルと
動的チェックなんて恥ずかしげもなく言っちゃう
バカ用言語があんたにとって有難いのは分かったよ
ここはC++相談室
C++という土俵に立っている者の場だ
落ちこぼれて逃げ出したやつの遠吠えは
誰も聞きたがってない
どっか行け、邪魔なんだよ
626デフォルトの名無しさん
2022/08/19(金) 11:17:41.46ID:HCuI/gXC 自分のミスを道具のせいにするやつ
そういえば法案のミスをワープロのせいにするバカ役人がいたな
こういう手合いは一事が万事
そういえば法案のミスをワープロのせいにするバカ役人がいたな
こういう手合いは一事が万事
627デフォルトの名無しさん
2022/08/19(金) 11:44:22.83ID:SM6rQCcv >>616が何を言いたいのか今もって分からない
悩む
悩む
628デフォルトの名無しさん
2022/08/19(金) 11:53:43.76ID:SM6rQCcv 一般用語の参照を使ってると思われるあたり
この人(>>613)はC++の参照を知らないレベルだと思うんだよね
C++に関してはほぼ知識がないまま
受け売りでRustが生ポインタを廃止?した利点を主張している
(私もRustのコードは書いたことがないんだけども)
この人は何がしたいんだろうか?
この人(>>613)はC++の参照を知らないレベルだと思うんだよね
C++に関してはほぼ知識がないまま
受け売りでRustが生ポインタを廃止?した利点を主張している
(私もRustのコードは書いたことがないんだけども)
この人は何がしたいんだろうか?
629デフォルトの名無しさん
2022/08/19(金) 11:59:22.84ID:6kbXcgP9 OSのAPIなりその他雑多なライブラリなりでポインタ要るからなあ・・・
630デフォルトの名無しさん
2022/08/19(金) 12:19:36.97ID:HCuI/gXC 動的型付け・・・あー、もしかして動的型宣言のことかな?
だとすると具体的に何言語のことを言ってるんだろう?
Bにはそんなもんないし・・・
だとすると具体的に何言語のことを言ってるんだろう?
Bにはそんなもんないし・・・
631デフォルトの名無しさん
2022/08/19(金) 12:44:26.95ID:BT0K6AVq 昔構造体を値で渡したらポインタにしろっておっさんに怒られたっけ
速度を気にしないんだったらコピーでええのに糞めんどくさかったわ
速度を気にしないんだったらコピーでええのに糞めんどくさかったわ
632デフォルトの名無しさん
2022/08/19(金) 12:47:51.92ID:zzLlPl0v 馬鹿が二人ほど恥を晒しております
633デフォルトの名無しさん
2022/08/19(金) 12:51:04.37ID:FysKbdqv634デフォルトの名無しさん
2022/08/19(金) 13:06:02.28ID:HCuI/gXC635デフォルトの名無しさん
2022/08/19(金) 13:47:12.04ID:FysKbdqv >>634
あまりにも無知すぎて話にならないな
wikipediaでも何でもいいから勉強して出直して来い
動的な型と動的型付けの区別は最低限つけろ
静的型付け言語の中には動的な型と呼ぶものもあるが
静的型付けと動的型付けは基本的に排反の関係だ
あまりにも無知すぎて話にならないな
wikipediaでも何でもいいから勉強して出直して来い
動的な型と動的型付けの区別は最低限つけろ
静的型付け言語の中には動的な型と呼ぶものもあるが
静的型付けと動的型付けは基本的に排反の関係だ
636デフォルトの名無しさん
2022/08/19(金) 13:54:09.00ID:SM6rQCcv >>616が何を言いたいのか今もって分からない
悩む
悩む
637デフォルトの名無しさん
2022/08/19(金) 14:06:18.12ID:zzLlPl0v その一文がわからないようなレベルの奴がメモリ管理で全く失敗ないとか言ってんだもん
みんな呆れてんだよ
みんな呆れてんだよ
638デフォルトの名無しさん
2022/08/19(金) 14:08:38.12ID:SM6rQCcv639デフォルトの名無しさん
2022/08/19(金) 14:09:02.63ID:HCuI/gXC640デフォルトの名無しさん
2022/08/19(金) 14:28:41.00ID:SM6rQCcv641デフォルトの名無しさん
2022/08/19(金) 14:40:23.82ID:FysKbdqv642デフォルトの名無しさん
2022/08/19(金) 16:45:49.60ID:SM6rQCcv643デフォルトの名無しさん
2022/08/19(金) 17:07:32.80ID:rkGmDNWr 栄光在天
聖恩心から感謝申し上げます。
日ごろは激しい摂理の中、プログラム業ごくろうさまです。
さて、C++のコピーコンストラクタおよび代入演算子オーバーロードの質問でございますが、メンバ変数全てを関数定義内部で書き出すととてつもない量になってしまいます。
class Hoge
{
Hoge& Operator =(const Hoge&r);
int hage=0;
char sage=0;
std::unique-ptr<Hagehage> pHagehage;
etc…
Etc…
Eat…
};
Hoge& Hoge::operator=(const Hoge&r)
{
hage=r.hage;
sage=r.sage;
pHagehage=std::make-unique<Hagehage>(r);
Etc etc……
}
メンバにユニークポインタがあるので書き出さないとダメな感じになっちゃうのですが……量がががが(>_<)
これらにおいて、何か楽になるような裏技はありますか?
それとも一つづつ足していかなければならないのでしょうか?
もしかしたらコンパイラやIEDの部門で行うべき変な質問かなとも思いますが……何かやり方やティップがありましたら教えていただければ……
相対的に有田退治にもなります!
聖恩心から感謝申し上げます。
日ごろは激しい摂理の中、プログラム業ごくろうさまです。
さて、C++のコピーコンストラクタおよび代入演算子オーバーロードの質問でございますが、メンバ変数全てを関数定義内部で書き出すととてつもない量になってしまいます。
class Hoge
{
Hoge& Operator =(const Hoge&r);
int hage=0;
char sage=0;
std::unique-ptr<Hagehage> pHagehage;
etc…
Etc…
Eat…
};
Hoge& Hoge::operator=(const Hoge&r)
{
hage=r.hage;
sage=r.sage;
pHagehage=std::make-unique<Hagehage>(r);
Etc etc……
}
メンバにユニークポインタがあるので書き出さないとダメな感じになっちゃうのですが……量がががが(>_<)
これらにおいて、何か楽になるような裏技はありますか?
それとも一つづつ足していかなければならないのでしょうか?
もしかしたらコンパイラやIEDの部門で行うべき変な質問かなとも思いますが……何かやり方やティップがありましたら教えていただければ……
相対的に有田退治にもなります!
644はちみつ餃子 ◆8X2XSCHEME
2022/08/19(金) 17:19:48.26ID:FT/EuRcZ >>643
メンバを
Hoge& Operator=(const Hoge&r)=default;
というように宣言すればデフォルトの定義が実装される。
全てのメンバに対して代入演算子を適用したのと同じことになる。
(もちろん全てのメンバを代入するという挙動で駄目な場合は自分で書くしかしょうがない。)
メンバを
Hoge& Operator=(const Hoge&r)=default;
というように宣言すればデフォルトの定義が実装される。
全てのメンバに対して代入演算子を適用したのと同じことになる。
(もちろん全てのメンバを代入するという挙動で駄目な場合は自分で書くしかしょうがない。)
645デフォルトの名無しさん
2022/08/19(金) 17:31:34.37ID:HCuI/gXC >>641
そのレスには動的な型についての言及がないな
誤魔化したいわけね、返事ありがとう
動的型宣言という言葉は存在しないと言いながら
動的型付けとは【意味が違う】とはどういうことだ?
存在しないものは比較できないはずだぞ
operator<=>でSFINAEだなpgr
そのレスには動的な型についての言及がないな
誤魔化したいわけね、返事ありがとう
動的型宣言という言葉は存在しないと言いながら
動的型付けとは【意味が違う】とはどういうことだ?
存在しないものは比較できないはずだぞ
operator<=>でSFINAEだなpgr
646デフォルトの名無しさん
2022/08/19(金) 17:35:12.15ID:HCuI/gXC >>624-629には沈黙か
大草原
大草原
647はちみつ餃子 ◆8X2XSCHEME
2022/08/19(金) 17:39:10.42ID:FT/EuRcZ >>643
そもそも代入演算子は特に指定しなくても定義されるはずだな。
(ただし基底とメンバの全てが代入可能であるとき。)
class foo {
public:
int x, y, z;
foo(int x, int y, int z) : x(x), y(y), z(z) {}
foo(void) : x(0), y(0), z(0) {}
};
int main(void) {
foo x(1, 2, 3), y;
y=x; // 代入できる
}
そもそも代入演算子は特に指定しなくても定義されるはずだな。
(ただし基底とメンバの全てが代入可能であるとき。)
class foo {
public:
int x, y, z;
foo(int x, int y, int z) : x(x), y(y), z(z) {}
foo(void) : x(0), y(0), z(0) {}
};
int main(void) {
foo x(1, 2, 3), y;
y=x; // 代入できる
}
648デフォルトの名無しさん
2022/08/19(金) 19:46:49.43ID:FysKbdqv649デフォルトの名無しさん
2022/08/19(金) 19:50:44.27ID:HCuI/gXC >>648
勝ったーwww
勝ったーwww
650デフォルトの名無しさん
2022/08/19(金) 19:52:29.50ID:kYAWbXnu >>648
負けちゃったね・・・(´・ω・`)
負けちゃったね・・・(´・ω・`)
651デフォルトの名無しさん
2022/08/19(金) 20:42:25.54ID:rkGmDNWr >>644
>>647
規制されてしまいましたが643でございます。
メンバにユニークポインタがある場合は代入演算子とコピコンは削除された関数とされてしまい、コピーが実行できません(涙
ユニークポインタは明示的に複製されないとだめなのはわかるので、仕様には文句があるべくもないのですが……
例えばの話、データ型にint char等のメンバが100個あったとして、ユニークポインタのユーザー定義型が1個紛れ込むだけで、すべてのメンバを書き出しをしなければいけないのでしょうか?
みなさんはちゃんと書きだしているのですか?と疑問に思ったので・・・
まあユニークポインターを含むデータ型をコピーしない運用をなさっているのだと思うのですが、わたしは使ってしまいます(怒)
そこで、なにか裏技のような方法がないのかなとお聞きしてみた次第であります(`・ω・´)ゞ
>>647
規制されてしまいましたが643でございます。
メンバにユニークポインタがある場合は代入演算子とコピコンは削除された関数とされてしまい、コピーが実行できません(涙
ユニークポインタは明示的に複製されないとだめなのはわかるので、仕様には文句があるべくもないのですが……
例えばの話、データ型にint char等のメンバが100個あったとして、ユニークポインタのユーザー定義型が1個紛れ込むだけで、すべてのメンバを書き出しをしなければいけないのでしょうか?
みなさんはちゃんと書きだしているのですか?と疑問に思ったので・・・
まあユニークポインターを含むデータ型をコピーしない運用をなさっているのだと思うのですが、わたしは使ってしまいます(怒)
そこで、なにか裏技のような方法がないのかなとお聞きしてみた次第であります(`・ω・´)ゞ
652デフォルトの名無しさん
2022/08/19(金) 20:46:36.71ID:xBNdlDtB653デフォルトの名無しさん
2022/08/19(金) 21:01:24.21ID:rkGmDNWr >>652
メンバ変数 std::unique_ptr<My_Uniq> my_uniq; において
this->my_uniq=std::make_unique<My_Uniq>(*(right_arg.my_uniq.get()));
とコピーできるのはシンプルなのですが……
struct hoge
{
hoge& operator=(const hoge& r);
int a=0,b=0,c=0;
char d=0,e=0,f=0;
std::string g,h,q;
std::unique_ptr<MyHage> pMHage;
};
といった構造体において、
hoge& hoge::operator=(const hoge& r)
{
//メンバ全部かかなきゃいけない( ;∀;)
}
という感じになってしまうのが困るというか……もっと楽できないかなと思いまして(´;ω;`)
メンバ変数 std::unique_ptr<My_Uniq> my_uniq; において
this->my_uniq=std::make_unique<My_Uniq>(*(right_arg.my_uniq.get()));
とコピーできるのはシンプルなのですが……
struct hoge
{
hoge& operator=(const hoge& r);
int a=0,b=0,c=0;
char d=0,e=0,f=0;
std::string g,h,q;
std::unique_ptr<MyHage> pMHage;
};
といった構造体において、
hoge& hoge::operator=(const hoge& r)
{
//メンバ全部かかなきゃいけない( ;∀;)
}
という感じになってしまうのが困るというか……もっと楽できないかなと思いまして(´;ω;`)
654デフォルトの名無しさん
2022/08/19(金) 21:08:44.41ID:xBNdlDtB655デフォルトの名無しさん
2022/08/19(金) 21:14:52.11ID:rkGmDNWr656デフォルトの名無しさん
2022/08/19(金) 21:36:17.81ID:rkGmDNWr 643です
解決しました
皆様ご親切にありがとうござい甘いた
ラップしてオペレーター実装すればいいだけだったとは……
こんなので悩んでるの私だけではないだろうか
解決しました
皆様ご親切にありがとうござい甘いた
ラップしてオペレーター実装すればいいだけだったとは……
こんなので悩んでるの私だけではないだろうか
657652
2022/08/19(金) 23:10:05.19ID:SM6rQCcv >>656
携帯だったので書けなかったけどこんな感じで
template <typename T>
class deeep_copy_unique_ptr: private std::unique_ptr <T>
{
using Base_ = std::unique_ptr <T>;
public:
explicit deeep_copy_unique_ptr (T *p = nullptr): Base_ (p) {}
deeep_copy_unique_ptr (const deeep_copy_unique_ptr <T> &p): Base_ (std::make_unique <T> (*p)) {}
deeep_copy_unique_ptr &operator = (const deeep_copy_unique_ptr <T> &p) {Base_::operator = (std::make_unique <T> (*p)); return *this;}
using Base_::operator *;
};
携帯だったので書けなかったけどこんな感じで
template <typename T>
class deeep_copy_unique_ptr: private std::unique_ptr <T>
{
using Base_ = std::unique_ptr <T>;
public:
explicit deeep_copy_unique_ptr (T *p = nullptr): Base_ (p) {}
deeep_copy_unique_ptr (const deeep_copy_unique_ptr <T> &p): Base_ (std::make_unique <T> (*p)) {}
deeep_copy_unique_ptr &operator = (const deeep_copy_unique_ptr <T> &p) {Base_::operator = (std::make_unique <T> (*p)); return *this;}
using Base_::operator *;
};
658デフォルトの名無しさん
2022/08/20(土) 17:45:23.06ID:K3rnpbr9659デフォルトの名無しさん
2022/08/20(土) 17:53:55.99ID:zyxn7VyM ハンドルごとに異なるデストラクタを指定すればよいのでは?
何が難しいのかソースで示してくれませんか?
何が難しいのかソースで示してくれませんか?
660デフォルトの名無しさん
2022/08/20(土) 17:54:26.62ID:ThG9yriU661はちみつ餃子 ◆8X2XSCHEME
2022/08/20(土) 18:23:11.87ID:ktmIW8Jj >>658
ポインタ以外のリソース一般を扱うための unique_resource クラスの提案は出ている。
一部の処理系では使えるようになっているし、ポータブルな実装があるので導入してみてもいいかもね。
このような提案が出ているのは逆に言えばスマートポインタではハンドルを上手く扱えないということでもある。
ポインタ以外のリソース一般を扱うための unique_resource クラスの提案は出ている。
一部の処理系では使えるようになっているし、ポータブルな実装があるので導入してみてもいいかもね。
このような提案が出ているのは逆に言えばスマートポインタではハンドルを上手く扱えないということでもある。
662デフォルトの名無しさん
2022/08/20(土) 20:02:38.48ID:vLOPx7Du663デフォルトの名無しさん
2022/08/20(土) 21:48:51.04ID:XA6yEFAc >>658
そのハンドルって何? ハンドルを具体的に指定せずにソースで示せとな?
#include <memory>
#include <cstdio>
#include <string>
using namespace std;
int main ()
{
using File_Ptr = unique_ptr <FILE, decltype (&fclose)> ;
const string path ("hoge.txt");
File_Ptr fp (fopen (path.c_str (), "w"), &fclose);
const string buf ("hage\n");
fwrite (buf.c_str (), 1, buf.size (), fp.get ());
return 0;
}
そのハンドルって何? ハンドルを具体的に指定せずにソースで示せとな?
#include <memory>
#include <cstdio>
#include <string>
using namespace std;
int main ()
{
using File_Ptr = unique_ptr <FILE, decltype (&fclose)> ;
const string path ("hoge.txt");
File_Ptr fp (fopen (path.c_str (), "w"), &fclose);
const string buf ("hage\n");
fwrite (buf.c_str (), 1, buf.size (), fp.get ());
return 0;
}
664デフォルトの名無しさん
2022/08/20(土) 21:51:59.51ID:xbv+n9gR unique_ptr縛りですか?
shared_ptrならコンストラクタの第二引数にDeleter関数を渡せるけど
shared_ptrならコンストラクタの第二引数にDeleter関数を渡せるけど
665デフォルトの名無しさん
2022/08/20(土) 21:53:07.34ID:xbv+n9gR 私が言いたいことを >>663が言ってくれたみたい
666デフォルトの名無しさん
2022/08/21(日) 01:35:54.66ID:hxqq7KJv こんな昔ながらのRAIIクラスでいいじゃん
class FantasticHolder
{
FantasticHandle h = NULL_HANDLE;
errno_t e;
public:
FHHolder(int flag, void* data, FOption option)
{
e = create_fantasy(&h, flag, data, option, false, NULL, Fantasy::DREAM);
}
close() {
e = universal_fancy_destroyer(h, NULL, true, Fancy::FANTASTIC);
h = NULL_HANDLE;
}
~FHHolder() { close(); }
const FantasticHandle& getHandle() const {return h;}
erron_t getError const {return e;}
};
class FantasticHolder
{
FantasticHandle h = NULL_HANDLE;
errno_t e;
public:
FHHolder(int flag, void* data, FOption option)
{
e = create_fantasy(&h, flag, data, option, false, NULL, Fantasy::DREAM);
}
close() {
e = universal_fancy_destroyer(h, NULL, true, Fancy::FANTASTIC);
h = NULL_HANDLE;
}
~FHHolder() { close(); }
const FantasticHandle& getHandle() const {return h;}
erron_t getError const {return e;}
};
667デフォルトの名無しさん
2022/08/21(日) 13:06:57.68ID:j3ukytx2 >shared_ptrならコンストラクタの第二引数にDeleter
ほんそれ
ほんそれ
668デフォルトの名無しさん
2022/08/21(日) 18:27:12.08ID:llGchqj4 lzw書いたら、色々プリプロセス突っ込んでやったのにメルセンヌツイスタの前に敗北した。
2色ビットマップは1/5になったけど、ブロックソートがアホみたいに遅い・・・。Orz
2色ビットマップは1/5になったけど、ブロックソートがアホみたいに遅い・・・。Orz
669デフォルトの名無しさん
2022/08/25(木) 01:06:46.68ID:iYSr5CJi ロシアで収監されているナワリヌイ氏が以下URLツイートで「無限ループ」という表現を使ったんだが、どう思う?
https://twitter.com/navalny/status/1562448816267149315
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/navalny/status/1562448816267149315
https://twitter.com/5chan_nel (5ch newer account)
670デフォルトの名無しさん
2022/08/25(木) 09:24:32.64ID:q+czqL8k スレチ
671デフォルトの名無しさん
2022/08/25(木) 10:04:27.81ID:1QA/N1Qa サブルーチンsub、
subを呼ぶA、
subを呼ぶB、
があって、subをAとBからしか見えないスコープに置きたくなったんですが、そういうときはnamespaceを切るしかないですか?
subを呼ぶA、
subを呼ぶB、
があって、subをAとBからしか見えないスコープに置きたくなったんですが、そういうときはnamespaceを切るしかないですか?
672デフォルトの名無しさん
2022/08/25(木) 10:09:20.76ID:s36cDPHI >>671
sub, A, Bをひとつのファイルに入れてファイルスコープで区切るとかクラスにまとめてクラススコープで区切るとか
sub, A, Bをひとつのファイルに入れてファイルスコープで区切るとかクラスにまとめてクラススコープで区切るとか
673デフォルトの名無しさん
2022/08/25(木) 12:00:46.82ID:1QA/N1Qa674デフォルトの名無しさん
2022/08/25(木) 18:28:04.89ID:tuQ48GQq Javaとかではstatic関数まとめクラスはよく見るけどC++ではあんまり見ない
それこそnamespaceを使う
それこそnamespaceを使う
675はちみつ餃子 ◆8X2XSCHEME
2022/08/25(木) 18:44:56.88ID:ktMJLYyQ それはどうだろう。
namespace は内部を隠蔽しない。
キッチリと隠したいなら翻訳単位を分けるか、
翻訳単位内でも隠蔽したいならクラスに入れるかしかやりようがない。
やろうと思えば namespace で区切ってここにはアクセスしないことにするという
規約で運用するとかも出来るが、その程度で足りるなら
そんなに分けなくてもよくない? って思うし。
namespace は内部を隠蔽しない。
キッチリと隠したいなら翻訳単位を分けるか、
翻訳単位内でも隠蔽したいならクラスに入れるかしかやりようがない。
やろうと思えば namespace で区切ってここにはアクセスしないことにするという
規約で運用するとかも出来るが、その程度で足りるなら
そんなに分けなくてもよくない? って思うし。
676デフォルトの名無しさん
2022/08/25(木) 20:19:01.82ID:TTLAkLfZ subを公開ヘッダに書かずに非公開ヘッダに書くだけでよくね?もしくはヘッダを用意せずに各ソースコードからexternするとか。どっちも完全に隠蔽されるわけじゃないけど。
あとは全部同じソースコードに格納できるなら無名名前空間の中にsubを入れとくとか?
あとは全部同じソースコードに格納できるなら無名名前空間の中にsubを入れとくとか?
677デフォルトの名無しさん
2022/08/25(木) 21:41:52.10ID:nLwrVbOJ friend
678デフォルトの名無しさん
2022/08/25(木) 22:33:54.95ID:JbTCA7nE プライベートにズケズケ踏み込んで来るのは
友達としてちょっと...
友達としてちょっと...
679デフォルトの名無しさん
2022/08/25(木) 22:54:54.82ID:9RZfx+i1 キミも今日から新しいフレンズだね
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界隈でもランタイムって用語は
あんまり馴染みない気がする
あんまり馴染みない気がする
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- ニートしかいない時間ってマジでつまんないよな
- 結局さ
- メスイキして快感が身体の内側に残ってる間に寝るのが気持ちいい
- ジムで筋トレするようになったらオナニーしなくなったんだが
- 🖐( -᷄ὢ)俺がこの世で最も欲するものは>>2の>>3だ……
- フードデリバリー配達員ぼく毎日他の配達員とスタートダッシュバトルしてる🥺
