C++相談室 part146

レス数が900を超えています。1000を超えると表示できなくなるよ。
2019/11/07(木) 11:35:36.76ID:4wggfTwe
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
826デフォルトの名無しさん
垢版 |
2019/12/13(金) 00:22:24.50ID:0IHjBlJG
型演算をコンパイラに任せることが出来なくなって、すべてプログラミングしないといけなくなるのかな。
2019/12/13(金) 06:47:47.05ID:6WB0hlYg
>>824
むしろ(静的)型なんて俺には不要だぜ、ベイビーって奴の方がアホっぽいけどなw

>>825-826
静的型付け 動的型付け
あたりでググってこい
828デフォルトの名無しさん
垢版 |
2019/12/13(金) 07:17:35.68ID:0IHjBlJG
機械語は変数に型がない。
命令で型を使い分ける。
その大変さを考えると型欲しいってなるのかも。
2019/12/13(金) 07:24:37.08ID:Ry/2QtNy
まさにBがCに進化するときの考え方だね
2019/12/13(金) 09:49:21.00ID:wVkcEFxk
>>825
ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
用意して使うと言う発想はスクリプト言語的な発想。
そのようにした場合、コンパイラが厳密にどの関数を使うかが人間には
分からない事が多いので安全性を損なう場合が多い。
スクリプト言語は RAD言語なのため、できるだけ短い関数名で対処しようと
するが、それが思わぬ間違いを含みがち。
C言語が好かれているのは、どういう処理がされるかが人間が完全予測できる
ことで、「大体の動作」は好まれない。
2019/12/13(金) 09:53:03.46ID:wVkcEFxk
>>826
型の違いでコードを自動変化させるという思想は、C++の中でも非常に最近に
なって STL (template) で流行りだしたもの。
もともとC言語に型が導入されたのは、プログラマのミスをコンパイラが発見して
エラーを出してくれるようにするためだった。C言語には関数の多態性(overload)
がない。なお、override と overload は別の概念なので、知らない人は検索して
欲しい。
832デフォルトの名無しさん
垢版 |
2019/12/13(金) 09:53:50.44ID:0IHjBlJG
イネーブラ使えば良いのでは。
833デフォルトの名無しさん
垢版 |
2019/12/13(金) 10:00:20.89ID:0IHjBlJG
コンセプトコイコイって感じなのかな。
2019/12/13(金) 11:27:07.79ID:WVlIRY9+
#pragma omp parallel forで
自動分割され、各スレッドに割り当てられた
ループの開始点と終了点を取得することできませんか?
2019/12/13(金) 18:09:24.89ID:e6j7CnOm
>C言語には関数の多態性(overload)がない

さらりと嘘をつくやつがおるな
2019/12/13(金) 18:27:30.70ID:fi1/rC5j
今UE4と組み込み以外でc++の仕事あります?
2019/12/13(金) 18:33:53.16ID:xTSwswyu
オーバーロードあるか?
ディスパッチの方法はいろいろあると思うが
2019/12/13(金) 18:55:58.62ID:ftjAwgQI
>>836
USのマイクロソフトに行け
2019/12/13(金) 19:01:03.38ID:ysGzQi5M
>>830
> ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
> 用意して使うと言う発想はスクリプト言語的な発想。

え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
「同じ関数名の関数を複数用意」できるのは静的型付け言語の特徴だよ
2019/12/13(金) 19:52:22.32ID:6WB0hlYg
>>839
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
関数は無理だがメソッドでいいならPowerShell
2019/12/13(金) 20:00:57.46ID:ysGzQi5M
PowrShell は型付言語ですからね。
それぐらいでしょ?
2019/12/13(金) 20:54:52.57ID:1q9LzdDI
用語としてメソッドと言ってるものでよければ Common Lisp もそうじゃね?
2019/12/13(金) 21:07:31.92ID:KHLl2/ku
>>841
うん、1つあれば
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
の反例になるからね
2019/12/13(金) 21:09:15.79ID:wKYhuojH
>>843
そしたら、一つぐらいしか無いって俺は意見を訂正するだけなんだが、

お前も同じ関数名の関数を複数用意できるのはスクリプト言語では
PowerShellだけだって訂正するって話でいいの?
2019/12/13(金) 21:13:12.55ID:gmdEaqRD
それでいいんじゃないの
2019/12/13(金) 21:23:18.13ID:T1rtAOWF
質問です
template <typename T>
constexpr inline T value;
template <typename T>
constexpr inline T value = (T)0;
こうやって変数テンプレートの宣言と初期化を分離すると
VC、clang(Xcode付属)ではエラーになるんですがwandboxで試すとエラーになりません
本来どっちの動作が正しいんでしょうか?
2019/12/13(金) 21:37:57.11ID:KHLl2/ku
>>844
別にそれでいいよ
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
が無知からの発言と認めてもらえればいいだけだしw
848デフォルトの名無しさん
垢版 |
2019/12/13(金) 22:26:34.23ID:0IHjBlJG
>>846
これも通ってしまった。
#include <iostream>

template <typename T>
constexpr T value = 1;

template <typename T>
constexpr T value = 2;

template <typename T>
constexpr T value = 3;

template <typename T>
constexpr T value = 4;

template <typename T>
constexpr T value = 5;

template <typename T>
constexpr T value = 6;

int main()
{
std::cout << value<int> << std::endl;
}
849デフォルトの名無しさん
垢版 |
2019/12/13(金) 22:27:26.74ID:0IHjBlJG
実行結果。

Start
6
0
Finish

最後の定義が有効になってるように見える。
850デフォルトの名無しさん
垢版 |
2019/12/13(金) 22:28:16.14ID:0IHjBlJG
Wandbox
C++
gcc HEAD 10.0.0 2019
2019/12/13(金) 22:54:36.18ID:T1rtAOWF
ありがとうございます、その結果を見るとgccがおかしいぽいですね・・・
宣言時に初期化は必須と考えて書いていこうと思います、ありがとうございました
852デフォルトの名無しさん
垢版 |
2019/12/13(金) 22:57:06.09ID:0IHjBlJG
僕もちょっとわからないんだけど。
2019/12/14(土) 00:21:27.14ID:stptR0oK
>>836
デスクトップアプリ
2019/12/14(土) 07:31:10.87ID:SZLGcxYz
>>846
診断メッセージをよく見ろよ
> error C2737: 'value': 'constexpr' オブジェクトは初期化する必要があります。

そもそも分離できないんだよ
いいか、constexprは翻訳時定数だぞ
それを翻訳段階9まで未解決のままにできると思うか?
2019/12/14(土) 08:56:55.09ID:fBoJLlft
>>854
なんでできるようにしないの?
そっちの方がおかしくね?
2019/12/14(土) 09:02:00.44ID:SZLGcxYz
なんでという理由も述べたはずだが
2019/12/14(土) 09:53:01.66ID:fBoJLlft
>>856
だからそれを可能にするようにしてくれ
2019/12/14(土) 10:02:03.90ID:SZLGcxYz
ん? 俺は江添じゃねえぞ
奴なら標準会員だから言ってみるのもいいが
2019/12/14(土) 10:02:27.48ID:SZLGcxYz
- 標準会員
+ 標準化委員
2019/12/14(土) 10:08:29.00ID:yV/FURvf
江添本ダメ絶対
2019/12/14(土) 10:30:50.58ID:stptR0oK
江添でもできない
862846
垢版 |
2019/12/14(土) 10:35:10.86ID:QUVSvjZy
>>854
>診断メッセージをよく見ろよ
見た上で言ってます(つまりgccまたはVC, clangのバグではないかということ

>いいか、constexprは翻訳時定数だぞ
それ以前にテンプレートなんですが
863デフォルトの名無しさん
垢版 |
2019/12/14(土) 12:26:05.30ID:m0rD8Ode
ローマ法王は根競べで決めるらしいですよ奥さん。
2019/12/14(土) 12:26:49.81ID:gw9aL+td
誰でも閲覧できる規格ドラフト見ればすぐにわかることをこんな掃きだめで聞いても
2019/12/14(土) 12:35:13.30ID:SZLGcxYz
>>862
なんかとんがってんな

コンパイラのバグとまで言う根拠は何だ?
相場では規格票の条文だが

テンプレートなのは見ればわかるさ
だから何なのか説明をやめないでくれ
2019/12/14(土) 12:50:37.99ID:gw9aL+td
>相場では規格票の条文

通産省の癖の抜けない老人はご退場いただきたい
867デフォルトの名無しさん
垢版 |
2019/12/14(土) 12:58:43.25ID:m0rD8Ode
これODRの緩和と関係あるんですかね?
2019/12/14(土) 13:34:08.27ID:T/HCOnVQ
>>772
>x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ
別に。
コアAの読み書きをコアA自身が見る分にはそうかもわからんが
コアAの読み書きを異なるコアBから見たらwrite同士やread同士でも順番が入れ替わり得る
(アウトオブオーダー実行の影響で

安全に動かすには適切にメモリバリアで順序化する必要がある
2019/12/14(土) 13:37:18.74ID:JwYnIOEa
>>868
read ==> read
read ==> write
は入れ替わらない
2019/12/14(土) 13:37:51.96ID:T/HCOnVQ
といってもロックレス何ちゃらぐらいの制御であればInterlockedCompareExchange()で済むから
スレッド間の通信なら普通メモリバリアとか直接触る必要は無いが
2019/12/14(土) 13:38:24.93ID:T/HCOnVQ
>>869
迷信
2019/12/14(土) 13:39:11.91ID:JwYnIOEa
ソースは?
2019/12/14(土) 13:39:40.59ID:T/HCOnVQ
リードキューやコマンドキューにコマンドが入るのはアウトオブオーダープロセスの事後であるため
そのような保証は無い
2019/12/14(土) 13:41:05.07ID:JwYnIOEa
それのソース
2019/12/14(土) 13:44:15.66ID:JwYnIOEa
https://github.com/herumi/misc/blob/master/cpp/fence.md
2019/12/14(土) 14:15:12.84ID:JwYnIOEa
x86系は
シングルコアのマルチスレッドアプリ
の多くがそのまま動くように出来てる

シングルコア時代が長かったから
2019/12/14(土) 14:55:10.15ID:QUVSvjZy
>>865
>テンプレートなのは見ればわかるさ
>だから何なのか
普通に考えて、実体化がまだなのに定義(初期化)を強制される妥当な理由はない、ということ
2019/12/14(土) 14:57:30.67ID:T/HCOnVQ
確かにリンク先のインテルのマニュアルの
>8.2.3.2 Neither Loads Nor Stores Are Reordered with Like Operations
>Example 8-2. Stores Are Not Reordered with Older Loads

>Initially x = y = 0r1 = 1 and r2 = 1 is not allowed
と書いてあって>>875と同じことが書いてあるが疑わしい
マニュアルが間違っているのではないか、

ちな
>8byteのデータはアドレスが8の倍数のときにアライメントされている。
から安全に読み書きできるというのはi486みたいな古いプロセッサーだとかえって危険らしい
>8.1.1 Guaranteed Atomic Operations
を見たらワカル、
2019/12/14(土) 15:04:35.33ID:T/HCOnVQ
つか上のインテルのマニュアルには「投機的実行時中のメモリアクセスではメモリアクセス例外は発生しない」
旨が2箇所ぐらいに書かれているが、
ということはつまりアセンブリコード上A→BまたはA→Cというメモリアクセスが条件によってどちら片方だけ実行されることを意図したコードであっても
A→B→Cというメモリアクセス順に成り得ることを意味し、他コアからもそう見えてしまうはずだが、
これをメモリアクセス順がreorderされていないうちに入れてしまうのはどうなのか、、、
マニュアル執筆者の国語の再教育が必要なのではないか
2019/12/14(土) 15:10:49.52ID:SZLGcxYz
>>877
おまえさん、もしかして
テンプレートの宣言と定義と
オブジェクトの宣言と定義を
ごっちゃにしてないか?

int test;
int test = 5;
これは宣言と定義じゃなく定義の重複だぞ
2019/12/14(土) 15:13:40.23ID:PwUHvw+y
お前なぁ
x86のこと大して詳しくないのにしゃしゃり出てくるからそういう情けないこと言うはめになるんだよ
x86でstd::atomicのmemory_orderを変えてバリア付きがどういうインストラクションになるか見てみな
storeのseq_cst以外は素のmovだから(コンパイラ依存だから絶対ではない)
2019/12/14(土) 15:20:09.00ID:T/HCOnVQ
そりゃー間違ったマニュアルにしたがって実装したら間違った実装になり得る(キリ

ていうかアウトオブオーダー実行の影響がマルチコアCPUにおいても透過的だと認めやっても良いが、
>>879の投機的実行の件はどうなんじゃ?
あるコアが投機的実行中に他のコアをストップさせるのでは何のための投機的実行かわからん…
2019/12/14(土) 15:21:14.95ID:k5kIl1RN
>>877
× 普通に考えて
〇 俺の頭の中で

× 妥当な理由はない
〇 妥当な理由は思い当たらない

テンプレートなら初期化は不要という主張なら、
constexpr 変数の宣言と定義を分離できないことは納得してるのかな?
そうだとして、それをテンプレートの時だけ可能とすることに意義があると思うの?

特別ルールを設ければコンパイラ実装やプログラムの読み取りにコストがかかるから、
明確が意義がなければ特別ルールは無いのが妥当だと思うよ。
2019/12/14(土) 15:24:42.79ID:QUVSvjZy
>>880, >>883
マウント取るのが最優先でまともな回答できない(するつもりも無い)んなら黙っててくれ

>これは宣言と定義じゃなく定義の重複だぞ
externつけたら?

>それをテンプレートの時だけ可能とすることに意義があると思うの?
テンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる

さて、
>× 普通に考えて
>〇 俺の頭の中で

>× 妥当な理由はない
>〇 妥当な理由は思い当たらない
こんなゴミみたいな煽り入れてきたからには逃げるなよ
2019/12/14(土) 15:32:39.86ID:SZLGcxYz
>>884
おまえさんの元の質問はこうだったな
template <typename T> constexpr inline T value;
template <typename T> constexpr inline T value = (T)0;

どこにexternなんて書いてある?
マウントがどうたら気にするあまり後出しなんかしてるのはそっちだぞ
こっちはそんなこと微塵も考えちゃいねえよ失敬な
最初の口調に戻れよ
2019/12/14(土) 15:36:57.55ID:QUVSvjZy
間違えた
Xテンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる
○初期化に使われる定数式の評価を遅らせられる

言い換えれば、宣言と定義を分離できないならconstな変数テンプレートの宣言時には
それに使う定数式内のすべての型が完全型であることを強制されてしまう
=std::is_integral_v = std::is_integral<T>::valueでいえば
is_integral構造体の方が取り回しがいい、ということ
なんのために変数テンプレートが導入されたのか・・・・
2019/12/14(土) 15:37:56.58ID:QUVSvjZy
>>885
自分が失敬だからこうなってるとは考えられないんだな
何様だよ、そもそも質問に答えてないだろうが
2019/12/14(土) 15:43:43.09ID:SZLGcxYz
>>887
template <typename T> constexpr inline T value;
template <typename T> constexpr inline T value = (T)0;
を例示しての質問に対して
int test;
int test = 5;
という答えをしているぞ
valueがtestになったのは悪かったが
余計な飾りをとって問題の核心を指摘したんだよ
2019/12/14(土) 15:48:43.77ID:SZLGcxYz
家事があるんでしばらく離席する
2019/12/14(土) 15:58:10.05ID:QUVSvjZy
規格でそうなってる(テンプレートゆえの特例は無い)のが”わかってるなら”
最初からそう言ってくれれば済むんじゃないの?
>>854を読み直せよ、テンプレートのことが完全にすっぽぬけた上に失礼な回答だろ

>コンパイラのバグとまで言う根拠は何だ?
とまで、って・・・・普通にありえるだろ、動作が違うんだから(未定義とかいう屁理屈は無しで)

で、>>883は逃げたの?
2019/12/14(土) 16:55:24.17ID:k5kIl1RN
>>886
やっぱり constexpr 変数の宣言と定義を分離して何がしたいのか、
何ができるようになるのか、が見えてこない。ごめんね。

宣言だけ見える constexpr 変数への参照やポインタだけはとれるようになるけど、
それだともう constexpr である必要なくて const 変数でよさそうで、それならふつうに
宣言と定義は分けられるし。

ちなみにテンプレート実体化までテンプレート引数依存箇所の評価はされないから、
宣言と定義を分ける話を「評価を遅らせられる」と言い表しているのも何か間違ってそう。
「記述を遅らせられる」の間違い?
2019/12/14(土) 17:16:54.80ID:SZLGcxYz
だめだこいつ
絶望的に人に者を尋ねる態度がわかってない
「言ってくれれば済む」とか図々しすぎ
技術的な議論がしたいがこいつ相手では
不必要にイラついちまって無理だわ
俺そんなに人間できてない
2019/12/14(土) 17:24:00.92ID:QUVSvjZy
>>891
すまん、
>テンプレート実体化までテンプレート引数依存箇所の評価はされない
これ検証してみたらたしかにそうだった
手元のコードで完全型を要求されたから、初期化時に不完全型を使えないと思い込んでた
(おそらくconstexprな変数テンプレートの実体化が、必要な型の実体化より先に来てたっぽい
多分構造体か何かでワンクッション置けば解決できると思う)
これなら確かに分けられなくて問題無いね

>>892
>いいか、constexprは翻訳時定数だぞ
>それを翻訳段階9まで未解決のままにできると思うか?
>なんかとんがってんな
>後出しなんかしてるのはそっちだ
>余計な飾りをとって問題の核心を指摘したんだよ
さらには
>最初の口調に戻れよ
の上で
>技術的な議論がしたいがこいつ相手では
>不必要にイラついちまって無理だわ
よくそんなセリフが言えたもんだ
自己評価高すぎじゃない?wwww
2019/12/14(土) 17:52:18.36ID:SZLGcxYz
意見が合うとか合わないとか以前の問題
根底的なメンタリティに欠陥がある相手とは話にならない
2019/12/14(土) 17:58:45.99ID:k5kIl1RN
FYI

>>846
Bug 68012: g++ incorrectly accepts forward declaration of constexpr variable template
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68012

>>848
One definition rule
https://timsong-cpp.github.io/cppwp/n4659/basic.def.odr#1
> No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template.
2019/12/14(土) 18:08:23.02ID:QUVSvjZy
>>895
わざわざありがとう、やっぱgccのバグだったのね
2019/12/14(土) 19:50:50.54ID:UskLmxJI
GCCに踊らされてスレを浪費した
2019/12/14(土) 20:04:04.94ID:4qfYuBec
>>837
オーバーロード=多態性じゃないんで…
オーバーライドのことなら当然cで実現できる
2019/12/14(土) 21:11:37.22ID:zf7JKoX1
>>898
どうやって?
いや、ディスパッチの方法はいろいろあると思うが
2019/12/14(土) 21:15:53.72ID:SZLGcxYz
禿もそんなことを言いながら
virtualの導入には当初反対から出発したんだよな
2019/12/14(土) 21:26:53.87ID:00Pm6Tju
>>899
その話題QZ相手にやったばかりなんで自分で調べて
902デフォルトの名無しさん
垢版 |
2019/12/15(日) 09:10:03.56ID:LATD77rz
君が忘れた腕時計見つめながら。
2019/12/15(日) 10:29:35.56ID:ir8W/KPm
>>898
overload は、同じ関数名で仮引数の型が違う関数を作れるという多態性のことですよ。
904デフォルトの名無しさん
垢版 |
2019/12/15(日) 10:52:20.53ID:LATD77rz
ツリーのイテレータがあるとして、イテレータが返すのはノードじゃなくて、ノードの持つ値ですよね?
すると、イテレータは立体機動出来ないといけなくなるけど、begin().begin()とか変ですよね?
begin().parent()とか。
905デフォルトの名無しさん
垢版 |
2019/12/15(日) 10:59:28.89ID:LATD77rz
イテレータが返すじゃなくて、イテレータの逆参照が返すかな。
2019/12/15(日) 11:08:51.65ID:fGq+HT2S
コレクションとしては子孫ノード全部を列挙できればよくて、ツリー構造に沿った操作が行いたいなら
それに加えて直接の子ノードのみを列挙するイテレータが用意できればいいだろう。
907デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:17:54.16ID:LATD77rz
何が子ノードのみを列挙するイテレータを返すかがよくわからない。
ノードの値がイテレータを返すことはできないので、ノードが子ノードを指すイテレータを返すとすると、イテレータの逆参照はノードを返すことになる。
これは意味論的にちょっと違うかなって。
コレクションにおいて位置はイテレータで示されるので、立体的な位置を持つツリーでは、イテレータ自身が立体機動出来て、巡回能力を持つイテレータは、reverse_iteratorのように外部に用意されれば良いのかなと思ったんだけど。
たとえば、レベルオーダーや深さ優先の巡回イテレータがあるとすると、普通に考えるとスタックやキューが内部に必要にある。
というわけでコピーのコストがあるので、これを標準には出来ないんじゃないかなって。
908デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:22:50.93ID:LATD77rz
子ノードを指すイテレータの逆参照が子ノードを返すとすると、*node.begin()は子ノードを返す。
**node.begin()は最初の子ノードの値を返すことになるんだけども。
イテレータの逆参照がノードを返す場合、初期化子リストが素直に実装出来てイイんだけども、イテレータの逆参照が値を返さないのが腑に落ちない感じ。
2019/12/15(日) 11:23:28.40ID:Q+saMC6e
>>903
こらこらoverloadは多態じゃない多重定義だ
多態はpolymorphism間違えるな
910デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:27:25.99ID:LATD77rz
イテレータは演算子の実装を求められてるわけではなく、その演算子を呼び出した時の効果を求められてるだけなので、++(int)はスタックをコピーしない方法を考えた。
2019/12/15(日) 11:30:57.88ID:fGq+HT2S
そこは値じゃなくてノードを返すイテレータでいいんじゃね?
必要ならイテレータ自体を拡張してもいいだろうけど、この場合はあまり応用できそうもないし。
912デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:31:53.05ID:LATD77rz
そうなのかな?
2019/12/15(日) 11:37:55.15ID:PfQY9kAx
まずイテレータで何を抽象化したいかを明確にしなよ
ノードを意識させたいのか?
914デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:38:38.78ID:LATD77rz
STL風ツリーって検索しても絶対出てこないし、CIAが絡んでるような気がしてきた。
915デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:39:36.48ID:LATD77rz
そこがわかんないんだよねえ。
禿4とか読んでると、イテレータは位置を意味してるように思うんだけど。
2019/12/15(日) 11:45:00.74ID:mSzJWPy5
ツリー構造
範囲が広すぎて
汎用化すると使い勝手が悪くなるからしない
ってだけかと
2019/12/15(日) 11:56:45.76ID:Q+saMC6e
recursive_directory_iteratorとかね
2019/12/15(日) 12:06:14.82ID:mSzJWPy5
なんでdirectory?
treeでいいじゃん
2019/12/15(日) 12:22:05.91ID:Q+saMC6e
いや立体がどうたら言ってるから
じゃあrecursive_directory_iteratorを使うユーザーのコードは
いちいち多重ループだの再帰だのといった処理になるのかって
思ってさ
920デフォルトの名無しさん
垢版 |
2019/12/15(日) 12:24:23.41ID:LATD77rz
ツリーは、あるノードの親が知りたいときもあるはず。
2019/12/15(日) 13:07:24.45ID:TeOOTcIs
ごちゃごちゃ考える前にイテレータの本分を決めなよ
begin()からend()まで++で走らせた時にどうなってほしいの?
話はそれからだ
2019/12/15(日) 13:09:44.18ID:MBW+LfoG
一般にtreeの探索順序はアルゴリズムと深く結びついてるし、
そこ凝りだすと沼だぞ。
923デフォルトの名無しさん
垢版 |
2019/12/15(日) 13:09:51.26ID:5G1zfwod
関数ポインタをシリアライズしてファイルとして保存し、
ファイルからその関数ポインタを利用できる形に復元する方法ってあるのでしょうか?
2019/12/15(日) 13:13:54.57ID:nhcuVJi8
関数だろうが変数だろうがポインタはただの整数値でしょ
2019/12/15(日) 13:18:39.25ID:p2D9PeH2
>>923 環境や「利用」の仕方を具体的に限定すればやりようはあるかもね。
レス数が900を超えています。1000を超えると表示できなくなるよ。