C++相談室 part163

■ このスレッドは過去ログ倉庫に格納されています
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
377デフォルトの名無しさん (ワッチョイ 0f02-9sAx)
垢版 |
2023/02/08(水) 21:14:42.08ID:TiunzV3b0
std::string_viewじゃダメ?
2023/02/08(水) 23:14:10.46ID:91RYCz8E0
実験もせずに聞くのもアレですが
 std::array<short, 100> x;
に対して
 *(unsigned long long*)&(x[0]) = 1ULL << 63;
とかやってもアライメント的に問題は無いの?
2023/02/08(水) 23:43:16.66ID:91RYCz8E0
問題ありそうなのでこんな感じにしたわ;;;
const static int NECONV = (sizeof(uint64_t) - 1) / sizeof(short) + 1;
union LargeInt {
  short m_small[NECONV];
  uint64_t m_large;
};
static void writeLargeInt(const uint64_t x, std::array<short, NE>& arr) {
  LargeInt u;
  u.m_large = x;
  for (int i = 0; i < NECONV; i++) {
    arr[i] = u.m_small[i];
  }
}
2023/02/09(木) 00:00:46.36ID:vSPJO8mm0
エンディアンでググれ
2023/02/09(木) 00:46:46.54ID:zt0qN6wf0
>>379
アラインというか、言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義という解釈が一般的だよ。
未定義と直接に書いてあるところもないんだけど出来ると書いてあるところもないのでこういう場合は未定義と解される。
(ただしスタンダードレイアウトで初期シーケンスが共通している箇所については OK 。)
m_large に書き込んだなら m_small として読むべきではない。

大抵の処理系では拡張として OK にしているけど細かい制約は場合によるから問題があるかないかは
処理系の都合をきちんと検証しないとわからん。

特にハードウェア寄りの仕方のない状況を除けば避けれるものなら避けたほうがよくはある。
2023/02/09(木) 08:04:31.16ID:nokdLSLo0
>エンディアンでググれ
えっ

>言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義
えっ;;;

LARGE_INTEGER共用体 (winnt.h)が使える環境でMicrosoft社製コンパイラでビルドする場合は未定義でないものとする、、、
LONGLONGとDWORDとLONG間でしか保証されないとか言われたら知らん、、、
2023/02/09(木) 08:22:03.41ID:3hUU93Bbr
>>382
未定義って言われたことに対して特定の処理系の仕様を挙げて何がしたいの?
2023/02/09(木) 08:27:19.15ID:6bPfV7hH0
>>379
union定義しなくても
temp >>= (sizeof(short)*CHAR_BIT);
でループ回せばよくね
2023/02/09(木) 12:07:03.43ID:A8pViFCvd
未定義な環境なんかないんだから
C++の規格的に未定義とかどうでもいいじゃん
どうせ特定の環境でしか動かさないコードだろうし
2023/02/09(木) 12:18:07.59ID:sPkxw56hd
#ifで環境とエンディアンで切ってしまえ
2023/02/09(木) 14:57:32.77ID:UhaInviD0
>>385
未定義な「環境」?
2023/02/09(木) 18:23:51.05ID:fimyrrlV0
特定の環境を想定してるのに、それを書かずに環境依存の質問するってほとんど釣りだよな
2023/02/09(木) 20:52:22.51ID:Fa1ce0CQ0
>>387
俺も思った
パワーワードだねw
2023/02/09(木) 21:21:46.36ID:/jyJY61Z0
おまいら読解力ゼロかよ
2023/02/09(木) 21:25:28.79ID:Fa1ce0CQ0
自分の意見主張を伝えるのは自分の責任
伝わらないのを人のせいにしたり人格攻撃したからって伝わりはしない
無駄で愚かな行為だ
2023/02/09(木) 21:29:41.32ID:/jyJY61Z0
ばか
2023/02/10(金) 12:00:14.43ID:rXRs96IF0
CHAR_BITってC++でもレガシーじゃないの?
2023/02/10(金) 12:35:42.19ID:ntA0RsMN0
「レガシーである」の定義が不明。
2023/02/10(金) 12:57:47.33ID:rXRs96IF0
例えばnumeric_limits<double>::infinity()を使うべきところでHUGE_VALを使うと
このジジイは・・・てなるようなこと

CHAR_BITを使うとこのジジイは・・・ってなる人は何使ってるのかって
2023/02/10(金) 13:11:57.08ID:ntA0RsMN0
numeric_limits<unsigned char>::digits なんだろうけど、圧倒的に記述が煩雑で
CHAR_BIT のほうが書きやすく読みやすいいから、「このジジイは・・・」と思う人が居ても
使えるところでは気にせず使えばいいかと。
2023/02/10(金) 13:27:44.87ID:ETMiF/8h0
#if で切り分けるのに使う定数はマクロで定義されていないといけないんで使いどころはある。
2023/02/10(金) 14:22:36.26ID:rXRs96IF0
>>396
numeric_limits<unsigned char>::digitsか・・・何かやだな
1バイトのビット数は実行環境そのものが持つ特性なので
unsigned charと特定の型識別子を書きたくない

>>397
if constexprというのもあるね
2023/02/10(金) 14:41:42.45ID:ETMiF/8h0
>>398
if constexpr は文を書けるところじゃないと使えないんで定義 (宣言) を切り替えるようなことができない。
この手の切り替えは割とごそっと切り替えることになると思うのでマクロは要るよ。
2023/02/12(日) 14:56:19.98ID:wUCNDItd0
template <class T , unsigned int pos , unsigned int len = 1>
struct bit_mask{
static constexpr T mask = ~( ~static_cast<T>(0) << (len) ) << pos;
// その他の処理
}

特定のビットをマスクする処理がしたくて↑のようなテンプレートクラスを作成したのだけど
warning: left operand of shift expression '(-1 << 1)' is negative [-fpermissive]
の警告が出てしまう

この警告が符号あり整数型を左シフトしてはいけないというのは分かるので、Tが必ず符号なし整数型であることを明示したいのだけどどうしたらいいだろう?
特殊化すると符号なしのバイト幅毎に処理を描かないといけなくなるし、もっと簡便なほうほうがあったりするのでしょうか?
2023/02/12(日) 14:59:59.76ID:b/cm1PRG0
>>400
std::is_unsigned
2023/02/12(日) 16:21:40.75ID:JClhsLo90
>>400 ((static_cast<T>(1) << len) - 1) << pos じゃダメかな?
2023/02/12(日) 16:47:42.70ID:37/dTLGh0
>>402
オーバーフローする
404デフォルトの名無しさん (ワッチョイ eb01-QMhD)
垢版 |
2023/02/12(日) 17:18:17.77ID:mwZX9mma0
Tをunsignedにするんだよね?
ぐぐったらstd::make_unsignedとかいうのがあった
2023/02/12(日) 17:33:12.94ID:bx1Kk0PX0
Tがunsignedの場合だけ許可したいならrequires std::is_unsigned_v<T>
C++17以下でコンセプト使えないならstd::enable_ifでも使おう

無理矢理signedにして問題握り潰せって奴だらけで震える
2023/02/12(日) 18:15:39.19ID:JClhsLo90
>>403 そこは >400 でも同じなのでは?
407デフォルトの名無しさん (ワッチョイ 3b7d-zpWe)
垢版 |
2023/02/13(月) 03:17:46.41ID:cPd3izqQ0
この手の警告/エラーはテンプレートを実装しただけでは出なくて、
テンプレートの実体化をした時にテンプレート実装部に警告/エラーが出るからややこしいんだよな

unsignedしか受け付けない前提で書いたコードをsignedで実体化するからこうなる

黙って内部でunsignedにするか
(using U=std::make_unsigned_t<T>; で全部U型で演算する)
signedをそもそも受け付けないか
(>>405 みたいにrequiresで受け付けるTを制限する)
の2択
408デフォルトの名無しさん (ワッチョイ eb01-QMhD)
垢版 |
2023/02/13(月) 06:42:50.66ID:Z5uQ91Hr0
そもそも「符号なしであることを明示」とか書いてるけど
俺が試した限り符号ありで実体化しないと出ないんだよな>>400の警告は
409デフォルトの名無しさん (スフッ Sdaa-AGaU)
垢版 |
2023/02/13(月) 10:38:37.81ID:vihtyFuzd
C++素人です
すみませんが、どなたか教えてください

こんなテンプレート関数があったとして、const を消す方法はないですか
const付いてても付いてなくても int* とか char* だけを判別したいので
毎回,余分にconst 判定入れるのだるいです

std::remove_const_t<T> とか試しても上手くいかないのでググってみたら、最上位じゃないので出来ないうんたらとか書いてあって...
最上位じゃないconstを外す方法があれば教えてください...

template<typename T>
auto function(T, t) {

  if constexpr (std::is_same_v<T, int*> || std::is_same_v<T, const int*>) {
   ...
  }
  else if constexpr (std::is_same_v<T, char*> || std::is_same_v<T, const char*>) {
   ...
  }
  ...以下、同パターン
}
410デフォルトの名無しさん (ワッチョイ eb01-QMhD)
垢版 |
2023/02/13(月) 10:50:31.38ID:Z5uQ91Hr0
std::is_same_v<std::remove_const_t<std::remove_pointer_t<T>>, int>
2023/02/13(月) 10:52:33.56ID:/W47z0NL0
>>409
>std::remove_const_t<T> とか試しても上手くいかないので
std::remove_const<T>でできるけども?
2023/02/13(月) 10:56:46.31ID:FEO/Fb/70
constexprなんだからどうやっても外せないだろ
2023/02/13(月) 11:05:28.80ID:FEO/Fb/70
いや、出来るか
2023/02/13(月) 11:14:03.33ID:FEO/Fb/70
コンパイラバージョンの違いかな
remove_const<T> //C++11
remove_const_t<T> //C++14
415デフォルトの名無しさん (ワッチョイ eb01-QMhD)
垢版 |
2023/02/13(月) 11:27:21.16ID:Z5uQ91Hr0
template <class T>
using remove_const_t = typename remove_const<T>::type;

typenameと::typeを省略するためのただのエイリアスやで
2023/02/13(月) 11:33:32.46ID:FEO/Fb/70
remove_const_tがコンパイラ通らなければremove_const<T>::typeと書けば良いと
2023/02/13(月) 13:02:27.22ID:B+Tt2JJW0
GCCもVCもデフォでC++14だかんな
418409 (スフッ Sdaa-AGaU)
垢版 |
2023/02/13(月) 13:15:51.58ID:vihtyFuzd
>>410
ありがとうございます
上手くconst int* は拾えましたが、それだとただのint も拾ってしまいました
ポインタ のみ拾いたいです

環境書いてなかったです
VisualStudio のVC++で、設定はC++最新版です
2023/02/13(月) 13:32:25.61ID:FEO/Fb/70
少しは自分で考えたらどうなの?
2023/02/13(月) 13:41:00.86ID:FEO/Fb/70
!std::is_same_v<std::remove_const_t<std::remove_pointer_t<T>>,std::remove_const_t<T>>
421418 (スフッ Sdaa-AGaU)
垢版 |
2023/02/13(月) 14:00:14.31ID:vihtyFuzd
>>420
すごいです、出来ました
ありがとうございました!
自分は馬鹿すぎてこんなの思いつけないですが….勉強続けます、感謝
2023/02/13(月) 14:16:09.00ID:FEO/Fb/70
考えたら出来るようになる
ガムバレ
2023/02/13(月) 14:55:08.76ID:TwATZYDk0
何がどう「出来ました」なのかよくわからないけど、 >409 を見る限りは
auto function(const int*), auto function(const char*) のオーバーロードで分けたほうがマシな
ものに見えるな。
2023/02/13(月) 17:23:27.09ID:v/vixYv70
そこまでして本当にテンプレートが必要か?って考える必要があると思うわw
殆どがテンプレートなんて必要ないだろw
425デフォルトの名無しさん (スッップ Sdaa-zpWe)
垢版 |
2023/02/13(月) 18:18:43.60ID:vSfDWYC1d
関数外にテンプレート1つ置いてしまった方がシンプルになるがね
constを消すではなくなるが

template<class T, class TTarget>
constexpr bool pointer_or_constpointer_v =
std::is_same_v<T, TTarget*> ||
std::is_same_v<T, const TTarget*>;

template<class T>
auto func(T t){
if constexpr(pointer_or_constpointer_v<T, int>){
...
}
}
2023/02/15(水) 13:51:43.45ID:vrVppx/z6
困っています.助けてください.

まず作りたいものを以下に記します.

クラスObjのオブジェクトが構築されると,
そのオブジェクト内でクラスObjのオブジェクトが0~2個生成される.
(生成されるオブジェクトの個数は一様乱数で決定される)
結果的に木構造のようなデータ構造になる.

クラスObjのオブジェクトはシリアルナンバと自分を作ったオブジェクト(親)へのポインタを持っている.

クラスObjは自分を作った親をたどることで,どのようにして(どのオブジェクトを親として)生成されたかを知ることができる.


で,作ってみたものを以下に張り付けておきます.

https://wandbox.org/permlink/lXq19mN1URMQhyh5

上記のプログラムで発生している問題を以下に記述します.

起点となるクラスObjのオブジェクトobjが生成された時点では,
各オブジェクトは自分自身を生成してくれた親オブジェクトへのポインタを正しく保持しているようなのですが,その後,メソッドrootsを呼んだときには親オブジェクトへのポインタが訳の分からないアドレスを指すことがあるようです.

なにがいけないのか,どうすれば意図した通りに動いてくれるのかご教授くださると助かります.

よろしくお願いいたします.
2023/02/15(水) 14:37:38.33ID:u0VdKeZj0
>>426
警告が出ているのになぜ直さない? それがすべてじゃないの?
2023/02/15(水) 16:15:28.85ID:vrVppx/z6
>>427
>>>426
>警告が出ているのになぜ直さない? それがすべてじゃないの?

メンバ関数rootsの型をvoidにして、return文をコメントアウトすれば警告は消えます。
しかし発生している問題は解決しません‥

ご指摘の件は本質的問題ではないように思われます。

引き続きご教授をお願いいたします
2023/02/15(水) 17:54:06.96ID:jBF4rRuI0
55行目にchildObj.reserve(2);を入れろ
また、人にコードを示すなら本質的に関連のない警告が出ない状態のコードをまず貼れ
2023/02/15(水) 18:19:34.79ID:M3Yzq8DS0
警告警察うざい
警告を消す為にバグを仕込むヤツを何度も見てきた
2023/02/15(水) 18:20:49.58ID:M3Yzq8DS0
警告が出るかどうかは環境による
C++のルールに従っているなら警告は無視
2023/02/15(水) 18:29:25.36ID:QsOS31DQ0
>>428
そっちじゃないよ
戻り値型はそのままでよくて、elseの場合に値を返せてないから返す
あと42行目のイテレータループの終了条件の書き方も違う、!=を使え
2023/02/15(水) 19:15:06.12ID:bwjUnWHEM
>>426
バグを調査するときの重要な考え方として「バグが確実に再現する条件/確実に発生しない条件を明確化する」というのがある。

この場合も、まずはバグ「メソッドrootsを呼んだときには親オブジェクトへのポインタが訳の分からないアドレスを指すことがある」の条件を明確化するために「訳の分からないアドレスはどの変数に入っているのか」「訳の分からないアドレスはどういうバケツリレーで渡されているのか」「訳の分からないアドレスは最初にどこにあるのか」あたりを明確化するのがよろしいかと。

そもそも>>426で「メソッドrootsを呼んだときには親オブジェクトへのポインタが訳の分からないアドレスを指すことがある」は再現するの?
2023/02/15(水) 19:33:01.86ID:QsOS31DQ0
ああemplace_backしたときにchildObjが再確保されてparentが古いObjを指したままになってるのか
だから>>429が正解ですね
2023/02/15(水) 19:57:27.07ID:LxP0k8m20
謎の上から目線で質問するやし多くね
436デフォルトの名無しさん (スッップ Sdaa-zpWe)
垢版 |
2023/02/15(水) 20:25:17.26ID:sKFuDIvBd
>>426
> control reaches end of non-void function
voidじゃない関数がreturnせずに終わってる

この表現なら理解できるか?
2023/02/15(水) 20:43:32.06ID:aDsLy0wQ0
こんなプログラム見ていると頭痛くなるw
2023/02/15(水) 21:25:47.83ID:SA6Um8/R0
>>430
ほんこれ
2023/02/15(水) 22:04:10.79ID:3ATKFMkE0
>>437
>こんなプログラム見ていると頭痛くなるw

誠に申し訳ない。
なんせ、近くにメンターがいないので自力でなんとかせにゃならんのです。

既にいくつか助言をいただいているので、もう少し頑張ってみます。

ゆるゆる見守ってくださると嬉しいです。
引き続きよろしくお願いいたします。
440デフォルトの名無しさん (ワッチョイ ff9c-nJVz)
垢版 |
2023/02/15(水) 22:07:21.36ID:k8KlMP7i0
なんでこんなに偉そうなの
2023/02/15(水) 22:10:23.23ID:3ATKFMkE0
>>431

環境はvisual studio pro 2019で、皆様のご助言を仰ぐためにwandboxに貼りました。

警告に関しては、あまり気にせずコーディングしています‥
よくない癖、ですよね(汗)
2023/02/15(水) 22:13:56.75ID:3ATKFMkE0
>>429
>>434

明日以降に試してみます。
まずはreserveを調べるところから。
ポンコツ過ぎで申し訳ないです。
2023/02/15(水) 22:14:34.95ID:eQXhj1Qw0
>>430
> 警告警察うざい
未だにこんなやつが要るんだな...

> 警告を消す為にバグを仕込むヤツを何度も見てきた
それはお前の周りのレベルが低すぎるだけじゃね?w
2023/02/15(水) 22:18:19.81ID:3ATKFMkE0
>>433

どうやら、再現性はあるようですが、私のスキルではどのような状況でバケツリレーが辿れなくなるのか、到底できないのです。

よいアイデアがあればご教示くださると大喜びします。
2023/02/15(水) 22:35:45.35ID:3Nk0h2mJ0
警告は潰さなければならない

警告が出たら検討しなければならない
今回の様に思いっ切りバグを示していることがあるから

検討した結果無視していいと判断しても、警告自体は消さなければならない
そのままじゃ次のビルドでまた出て、どんどん溜まって「これ検討したんだっけ??」ってなるから
この警告消しは#pragma warningでいい
2023/02/15(水) 22:42:19.58ID:YqKefIHG0
警告消すのにバグ仕込むスキルの人なら機能追加してもバグ仕込むだろ
2023/02/15(水) 23:06:20.39ID:Xq18TORR0
ここは20年前のままで安心した。久しぶりにC++読んだけど、普通に読めたわ。
どうでもよい会話をして、ろくに進まない感じ流石です。
2023/02/16(木) 00:34:35.79ID:G6Y1BfCz0
じゃあまた20年後な
2023/02/16(木) 00:46:09.85ID:N10j/iiy0
https://jp.quora.com/%E9%96%8B%E7%99%BA%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%A6-%E4%B8%8A%E5%8F%B8%E3%81%AB%E8%81%9E%E3%81%8F%E3%81%A8-%E3%81%A1%E3%82%83%E3%82%93%E3%81%A8%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92
まさにこれじゃん
2023/02/16(木) 02:31:44.69ID:PGUS078z0
>>444
問題が発生したら乱数のシードをそのとき使った値で固定する
そしてデバッガの使い方を覚える
https://learn.microsoft.com/ja-jp/visualstudio/debugger/getting-started-with-the-debugger-cpp?view=vs-2022
2023/02/16(木) 07:13:21.97ID:kLJI764s0
> この警告消しは#pragma warningでいい

警告警察の主張の本質がこれ
2023/02/16(木) 07:57:43.18ID:ZOPwX+PA0
www
2023/02/16(木) 08:05:05.35ID:u8Mt8J3eM
>>443
こういうやつが居るから、管理側は「勝手に警告を無視できないRustにしよう」と言い始めるんだよねぇ。
実際、コードの精査の難しい大規模プロジェクトとかだと、無能が成果を出せないという意味で効果的だし。
2023/02/16(木) 08:13:16.28ID:ZOPwX+PA0
設計がまともかどうか判断出来ない無能が警告を気にする
2023/02/16(木) 08:15:20.48ID:LB1U3BvE0
>>451
> 検討した結果無視していいと判断
を無視する無能
2023/02/16(木) 08:17:32.72ID:ZOPwX+PA0
アホが検討した結果など無意味
2023/02/16(木) 08:20:22.98ID:LB1U3BvE0
>>456
それは
> 警告を消す為にバグを仕込むヤツを何度も見てきた
みたいな職場の話だろw
2023/02/16(木) 08:20:39.33ID:u8Mt8J3eM
>>444
まずは>>450

あと「訳分からないアドレス」というレベルなら生ポインタは使わない方がいいので、すべてshared_ptrに置き替える。
というか、他人の古いライブラリを使わざるを得ない状況でもなければ、生ポインタは禁止にすべき。
2023/02/16(木) 08:24:11.83ID:ZOPwX+PA0
別の環境に移植して警告が何千個も出て来たら
わざわざ全部消すの?
アホじゃね?
2023/02/16(木) 08:28:56.23ID:ZOPwX+PA0
「検討しました」は解析ツールのコメントに残す物
わざわざコードを変えて消す物じゃない
2023/02/16(木) 10:01:01.26ID:LB1U3BvE0
>>459
消すだろ
てか、何も見ずに警告無視するのかよw
2023/02/16(木) 10:03:35.75ID:G6Y1BfCz0
メモリがわからないままC++してもいずれ破綻するのは目に見えてるからな…
shared_ptrを使えば再確保によるポインタの無効化は回避できるかもしれんけど、
そしたら今度は循環参照にはまりそう
2023/02/16(木) 11:32:34.13ID:u/aa82YP0
>>445
>>446

まさにコレでした。

皆様の叡智に脱帽です。
感謝します。

C++って便利だけど難しい局面がすぐ横にある感じでスリリングですね。
そう感じるのは慣れないうちだけなのかもしれませんが。
2023/02/16(木) 11:42:26.72ID:u/aa82YP0
>>458

>あと「訳分からないアドレス」というレベルなら生ポインタは使わない方がいいので、すべてshared_ptrに置き替える。

もともとC言語を触っていたので生ポの方が好きなんです。
でも、スマポに統一すべし、という意見には賛成なので、その様に直すつもりではおりますが、
 enable_shared_from_thisを継承せよ
とか、一方で
 コンストラクタ内でshared_from_this()は使うな
とか、色々クリアせねばならない問題もあり、解決には相当な勉強が必要そうで、時間がかかる見込みです。
2023/02/16(木) 12:24:54.96ID:zXNtK8a2d
自分の頭で考えることを放棄してるやつほど
偉そうにしてるやつの言うがままに洗脳されやすい
2023/02/16(木) 12:25:33.04ID:OOEMlbNYM
>>464
スマートポインタ&参照を使わないならcで十分な気がするなぁ。

むしろcにスマートポインタと参照だけでも追加してほしい。
2023/02/16(木) 12:43:03.84ID:u/aa82YP0
>>466

C++って何だかカッコいいじゃないですか。
noexceptとかC言語な人には無縁なキーワードが盛り沢山だし、いかにもアタマ良さそうな雰囲気がたまらんのです。

C言語でできることはC++でもできるようになりたいな、とゆるゆる独学している次第です。
2023/02/16(木) 13:36:26.42ID:juZ9Em/90
人が書いた部分で警告大量に出るから無視してるんだが
お前ら一人で書いてんのか?
2023/02/16(木) 13:38:12.19ID:kLJI764s0
一番大事なものをちゃんと持ってるな
応援するぜ
2023/02/16(木) 13:39:41.99ID:kLJI764s0
>>468
大量に出る警告には何か原因がありそうなので
それをまず調べる
2023/02/16(木) 13:54:28.24ID:G6Y1BfCz0
>>464
そもそもコンストラクタで子供のインスタンスを作らないほうがいいんじゃね?
2023/02/16(木) 14:00:08.48ID:UCNi870E0
何のために警告出させてんだよ
端からガン無視する気なら、コンパイルオプションで警告止めちゃえよ
473デフォルトの名無しさん (ワントンキン MMfa-EB70)
垢版 |
2023/02/16(木) 14:05:54.88ID:gmYGasSwM
まさにコレでしたって結局どう直したの?
2023/02/16(木) 14:30:11.87ID:G6Y1BfCz0
あとchildObjから削除しないなら、ポインタを辿って探索せんでも、
シーケンシャルナンバーでランダムアクセスすればいいじゃんねぇ
2023/02/16(木) 14:32:02.54ID:G6Y1BfCz0
ああ、インスタンスデータなんか…すまん忘れてくれw
2023/02/16(木) 15:58:03.67ID:INPRljPt0
>>466
「だけでも」っていってもそれに連なる諸々の概念がひっついてるから部分的にやるのは難しいんだよな。

C++ のスマートポインタはクラスとして実装されてるから C++ の型システム抜きに
スマートポインタだけ C に移植ってわけにはいかないし、
参照の振る舞いを説明するには値カテゴリを増やして場合分けしなきゃならんし。
2023/02/16(木) 16:08:00.45ID:u/aa82YP0
ええと、最終的にはファイルから与えたデータに基づいて木構造を構成し、その木構造でナニかしようということを目論んでまして、そうなるとコンストラクタ内で子供のインスタンスを作ればいいんじゃないか、と考えた次第です。

データをあるオブジェクトに喰わせたら、勝手に木構造が出来上がるようにしたかったのです。

で、そのプロトタイプを作る段階でつまづいていた次第です。

とりあえず、皆様のご助言で動くようになったものについては明日以降にw
andboxに貼ります。

引き続きご指導をお願いいたします。
■ このスレッドは過去ログ倉庫に格納されています