[過去ログ] C++相談室 part164 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
283
(1): (ワッチョイ 32fb-9xvA) 2023/06/21(水)00:52 ID:2lh42auf0(2/2) AAS
C++14にはif constexprが存在しないから
template使ったオーバーロードしか手段がない

質問者がC++14環境でって言ってたからこんなクソ面倒くさいことやれば一応できるっていう例示
284: (ワッチョイ 8101-1tDD) 2023/06/21(水)01:17 ID:CWKUsltc0(2/3) AAS
>>281,283
ありがとう
>引数として int を渡せる (int から暗黙に変換可能な仮引数を持っている) というのと
>厳密に int そのものでなければならないというのとでは制約の厳しさが違う。
こういうことね
285
(2): (ワッチョイ a901-UvLK) 2023/06/21(水)04:29 ID:IDPPhD2V0(1/3) AAS
>>260
あー本来グローバルも対象になるのか、適当こいてスマソ

だが>>248で質問者が言ってるように、元のコードで順序を変えてもダメなのよ
何故か考えてはちみつのコードを以下のようにしたら同様に通らなかった

namespace ns {
template <class T = int>
struct foo{};

// added
struct hoge{};
int operator +(const hoge &x, const hoge &y) {return 1;}
省9
286: (ワッチョイ a901-UvLK) 2023/06/21(水)09:44 ID:IDPPhD2V0(2/3) AAS
あ、すまんfooがクラステンプレートになってるの直し忘れた(直しても同じだが)
287: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:22 ID:3HBFHOpK0(2/5) AAS
>>285
名前探索 (name lookup) は狭い名前空間から探索していって
合致する名前があればそれより外側に同名の関数があっても
オーバーロード解決に参加しない。

わかりやすい例で言えばメンバ関数は非メンバより優先されるし、
メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。

void foo(void) {}

struct bar {
void baz(void) {
// この foo は bar::foo のこと
省6
288: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)10:34 ID:3HBFHOpK0(3/5) AAS
例をちょっと間違えたのでやりなおし。

void foo(int) {}

struct bar {
void baz(void) {
foo(1);
}
void foo(void) {}
};

こうすると非メンバ関数の foo は候補にすらならないという話。
289: (ワッチョイ 8101-1tDD) 2023/06/21(水)11:00 ID:CWKUsltc0(3/3) AAS
g++更新にともない
自前ライブラリのビルドでエラーが出るようになって
悩んでたところを解説してくれてる
マジで凄い人達だな
290: (ワッチョイ a901-UvLK) 2023/06/21(水)11:31 ID:IDPPhD2V0(3/3) AAS
>メンバ関数内にひとつでも候補が見つかった時点で非メンバ関数は一切考慮に入らなくなる。
thx。確かにこれ経験したことあるわ・・・ややこしいし名前変えて対処したけど
291: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)12:13 ID:3HBFHOpK0(4/5) AAS
>>285 の例は using を使う形でも解決できる。 (設計意図によってはそれが妥当かどうかわからんけど。)

namespace ns {
struct foo {};

struct hoge {};
int operator+(const hoge& x, const hoge& y) { return 1; }
};

ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); }

namespace ns {
template <class T>
void bar(const T&) {
省6
292: (ワッチョイ ad10-fL0y) 2023/06/21(水)12:20 ID:s1sJDdcu0(1) AAS
C++って、こういう悪夢みたいなテクニックで溢れかえってるよなあ
RustやらPythonだのに人気が移るわけですよ
293: (テテンテンテン MM96-Axrn) 2023/06/21(水)12:23 ID:xjKiS8Z6M(1) AAS
記法でいうならNimがいいよ。
294: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/21(水)16:00 ID:3HBFHOpK0(5/5) AAS
カスタマイズされた関数が呼ばれるようにする綺麗な方法として customization point object という概念が近頃は導入されてる。
綺麗な方法というか汚い部分はライブラリに隠すってだけなんだけど。
真似してみてもいいかもね。

より綺麗な方法が導入されるのはいいんだけど、
過去の方法が消えてなくなるわけでもないし完全に置き換えられるわけでもないからなぁ。
個々には良くなっても全体としては余計に複雑になるだけってのもよくある話。
外部リンク:m.xkcd.com
295: (ワッチョイ c997-trtU) 2023/06/22(木)09:50 ID:+UOgHQ6A0(1) AAS
max RSS (メモリ総量) の取得ってWindowsとLinuxでポータブルな方法ないの?
296: (スプッッ Sd12-9xvA) 2023/06/22(木)10:07 ID:T+/An9G4d(1) AAS
C++標準ライブラリには無い

外部ライブラリに頼るか自分で実装するかになるけど、結局のところ#ifdefでOS依存の機能を呼び分けるしかない
297: (ワッチョイ 196e-ljvc) 2023/06/22(木)10:35 ID:myrOOi5M0(1) AAS
std::uintptr_t get_available_memory();
とプロトタイプだけ用意して、定義を環境別に作るだな

内容的に割と単純な処理のはずで
環境別に用意といってもたいした工数にはなるめえよ
298: (アウアウウー Sacd-Hkv7) 2023/06/22(木)17:54 ID:Sn58Ngpoa(1) AAS
Nim いいよね
C++ 嫌になったら Nim においでおいで
299
(4): (ワッチョイ c997-trtU) 2023/06/23(金)06:00 ID:AFPisFIg0(1) AAS
なんかのオブジェクトをポインタじゃなく実体として持ってるとして、それを delete するやり方ってないの?
たとえば std::vector A に対して
delete &A;
みたいな
300: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:14 ID:Dz+tkRpF0(1/2) AAS
「実体を持っている」と言うが「誰が」持っているかにもよる
グローバル変数として宣言しているなら予めメモリ上に確保されているから破棄は無理(強引に再利用はできる)
スコープ内で変数として宣言したのなら必要なメモリはスタック上にあるからスタックを弄るしかない
別のオブジェクトのメンバ変数として宣言されているならそのオブジェクトを破棄する
301: (ワッチョイ 92ad-DGQF) 2023/06/23(金)06:17 ID:Dz+tkRpF0(2/2) AAS
スコープ内でってのはローカル変数の意味で言ったの
302: (ワッチョイ 3602-Ul6j) 2023/06/23(金)07:14 ID:GEB8UNzF0(1) AAS
A.~vector<>();でいいんじゃないの?
メモリ解放が必要ならdelete(void*)&A;とかして。
1-
あと 700 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.014s