[過去ログ] C++相談室 part157 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
403: 2021/09/20(月)00:06 ID:luBeUSFz(1/4) AAS
周期15.6 msを下位互換性のために新しいWindowsがエミュレートしているというのはありえない
1スレッドへの最大割り当て時間としての15.6 msはPCによって変わり得るデフォルト値にすぎないし、
外部リンク[html]:hp.vector.co.jp
だいたい設定でも変わるし、
外部リンク[html]:atmarkit.itmedia.co.jp
(スレッドのクォンタムタイム)
取得間隔が15.6 msにならない理由は>>399で説明いしたし
404: 2021/09/20(月)00:10 ID:luBeUSFz(2/4) AAS
で、GetTickCount()の分解能かきちり1 msであることはビジーループ的に値をとってみたらワカル
分解能に関して後方互換性も糞もなく昔からそいうブツのはず
多分やけど、ハードウェアのカウンタを読んでるだけやからなあれ
405: 2021/09/20(月)00:25 ID:luBeUSFz(3/4) AAS
AA省
406: 2021/09/20(月)00:26 ID:luBeUSFz(4/4) AAS
vec[0]=1391507593
vec[1]=1391507609 (diff=16)
vec[2]=1391507625 (diff=16)
vec[3]=1391507640 (diff=15)
vec[4]=1391507656 (diff=16)
vec[5]=1391507671 (diff=15)
vec[6]=1391507687 (diff=16)
vec[7]=1391507703 (diff=16)
vec[8]=1391507718 (diff=15)
vec[9]=1391507734 (diff=16)
省3
407: 2021/09/20(月)06:12 ID:DnvAIBnA(1/5) AAS
>>402
自己レスです
GetTickCountとGetLocalTimeとGetSystemTimeの分解能調査
外部リンク:ideone.com
1000回値が変わるのにかかった時間をマイクロ秒で計測した(std::chrono::high_resolution_clock::now()で計測)
PS C:\> .\ConsoleApplication8.exe
15614998
1003946
1000238
PS C:\> .\ConsoleApplication8.exe
省6
408: 2021/09/20(月)07:46 ID:Pqsh6MJQ(1) AAS
ここはWindowsAPIスレになったのか
409: 2021/09/20(月)07:51 ID:l/aXhlvm(1) AAS
スレタイも読めない、検索できないやつがまともなプログラム書けるはずもなく・・・
410: 2021/09/20(月)07:52 ID:Mm5TpRqo(1) AAS
windows API使いたがるひとがいてめんどくさい
こっちはなるべく標準のc++使いたいのに
411: 2021/09/20(月)08:19 ID:VgAULHWI(1/4) AAS
POSIXと比べるとクソ過ぎて話にならんよな
412: 2021/09/20(月)10:01 ID:LqQpPYvk(1) AAS
プラットフォーム固有の話も参考になる
今回の流れは Win32 API と std::chrono の違いが端緒だしスレ違いというほどではない
413: 2021/09/20(月)10:48 ID:T+6xg0LJ(1) AAS
そのクソがなんで一番利用者多いのか考えてみろ
414: 2021/09/20(月)11:24 ID:VgAULHWI(2/4) AAS
バカに合わせてるからだろ
言わせんなよ恥ずかしい
415: ハノン ◆QZaw55cn4c 2021/09/20(月)11:26 ID:+hQanlE4(1) AAS
私馬鹿よねーお馬鹿さんよねー今日も win32api
416(1): 2021/09/20(月)11:30 ID:DnvAIBnA(2/5) AAS
とりあえず動かないから面白くないということなのかもなということで、Linuxのclock_gettimeにも対応しといた。
BSDとmac組は知らん。
外部リンク:ideone.com
一応WIN32はあえて低解像度のを計測してるという点だけは補足しておきます。
417(1): 2021/09/20(月)12:15 ID:rmuhdvcF(1) AAS
timeBeginPeriod
木屋さん元気かな
418(1): 2021/09/20(月)12:28 ID:26DwFCZj(1) AAS
元の質問見てないけどQPCでええんちゃうの
419: 2021/09/20(月)12:45 ID:DnvAIBnA(3/5) AAS
>>417
スレッドのスケジューリングも変化するので注意です。
tickとはそもそもそういうものでしたが。
外部リンク[html]:archive.linux.or.jp
>>418
>>395でそう言ったし、high_resolution_clockで使用されてるのもそれ
420(1): 2021/09/20(月)12:51 ID:VgAULHWI(3/4) AAS
CreateWaitableTimerEx(NULL,NULL,CREATE_WAITABLE_TIMER_HIGH_RESOLUTION,TIMER_ALL_ACCESS)
421: 2021/09/20(月)13:22 ID:DnvAIBnA(4/5) AAS
>>420
そのタイマは同期待ち合わせに使用するタイマリソースですね
時間計測用に使うのは勿体ないのでやめましょう
また無言でAPIだけ書かれても困ります
422(1): 2021/09/20(月)13:58 ID:VgAULHWI(4/4) AAS
バカか
計測するなら精度高めないと意味ないだろ
423(1): 2021/09/20(月)14:31 ID:LO5PkHvF(1) AAS
そもそもパフォーマンスの計測に使うなんて言ってなくない?
424(1): 2021/09/20(月)16:05 ID:DnvAIBnA(5/5) AAS
>>422
この例はExついてないけど、こういう使い方をするものなんだよ。
待機可能タイマー オブジェクトの使用 - Win32 apps | Microsoft Docs
外部リンク:docs.microsoft.com
>>423
>>388で求めているのは正確には時刻取得だね。つまりsystem_clockの話。
俺がしてるのは時間計測なのでsteady_clockの話。
違いは時刻の修正などにより増減するかしないかという特性の違いと、それを実現するHWタイマの分解能/性能の違い。
GetLocalTimeの分解能は文書にも記述がなく、>>393の指摘だけで事実関係が不明なまま宙に浮いてたので、>>416などでそれを計測した。
ここでは10〜15.6msの出元であるGetTickCountもついでに計測した。
省1
425(1): 2021/09/25(土)05:50 ID:B+D0wTVh(1/4) AAS
3種類ぐらいのタイマの時刻が1000回変化するのに要するトータル時間Tを測っているらしいが
この計測結果からSYSTEMTIMEの分解能がHWタイマの分解能/性能の違いに起因すると結論づけることはできない
実態は>>375な計り方でst1: SYSTEMTIME、now: nowtime_point、st2: SYSTEMTIME、の順で立て続けに時間をとると
>>388の通り
st1 ≦ now && now ≦ st2 + 1 ms
という結果なわけで、この「1 ms(<15.6 ms)というのは本当にハードウェアタイマの分解能なんかい話が違うぞ?!」と詰問されて
答えに窮する>>424な未来が見える見えまくり
426(1): 2021/09/25(土)05:55 ID:B+D0wTVh(2/4) AAS
実態は>>399に書いた理由のはずで、
証拠にst1の取得とnowの取得の間にSleep(1000)とか入れたら
>>388の結果はたちどころに
st1 ≦ now && now ≦ st2 + 1秒
に早変わりする
よってGetSystemTime()で取得するSYSTEMTIMEの分解能はHWタイマの分解能/性能起因ではなく、
GetSystemTime()で取得する時刻がOSのプリエンプションタイミングでのみの更新されるというソフト要因である、
という>>399に述べた理屈が正解ということでケテーイ
実際にやってはいないが天才なので以上のことはちょっと考えたらワカル
427: 2021/09/25(土)06:02 ID:B+D0wTVh(3/4) AAS
ごめ、Sleep(1000)を入れたのではOSにプリエンプションの機会を与えてしまうからNG
正しくは
GetSystemTime(&st1);
15.6 ms未満のビジーループ <== 訂正
now = system_clock::now();
GetSystemTime(&st2);
とすると、
st1 ≦ now && now ≦ st2 + 15.6 ms
にnowの精度が劣化する、に訂正
OSのAPIもプリエンプションの機会にならない保証が無いのでビジーループはガチでビジーループで作る必要があり、
省1
428: 2021/09/25(土)07:18 ID:B+D0wTVh(4/4) AAS
といいつつAPIに頼らずに10 ms規模のビジーループ(ビジーウェイト)させるのはやや技巧を要すると思ったので漏れが自らやってやった、
外部リンク:ideone.com
※ 計測の実行は要Windows
結果、1 ms、8 ms、16 ms、1秒のどれに変えても>>388と同じで、
std::chrono::now()の時刻nowに対し、その直後にGetSystemTime()で得た時刻st2が
1 msだけ追い越されることはあっても決して 1 msより大きく追い越されることは無かったorz
なぜじゃ闇が深いなこれ、
もちろんGetSystemTime()ではなくGetSystemTimePreciseAsFileTime()を使う(↑のソースコードのPRECISE_AS_FILETIMEマクロ定義を有効化する
と>>398の通りドンピシャな時刻順になる点はビジーウェイトがあっても変わらない。
GetSystemTime()のふるまいが一方的に謎杉
429: 2021/09/25(土)08:12 ID:HzR9ZlyY(1/2) AAS
WinAPIスレに持っていってくれますか?
結局<chrono>に固有の問題(?)ではなくて背後のAPI関数に関することって分かったはずなんで
430(1): 2021/09/25(土)08:44 ID:HzR9ZlyY(2/2) AAS
とか言いつつ自分で探してきたので貼っちゃう……
GetSystemTimeの分解能が15.6msというのはXPまでの話らしい
外部リンク[html]:www.thedelphigeek.com
431: 2021/09/25(土)09:20 ID:ZWKkb85T(1) AAS
>>425
HWタイマの分解能/性能の違いと言ってるのはsystem_clockとsteady_clockの違いの話でWindows APIの話はしてないよ。
一応補足しておくとepochも違う(時刻としてそのまま使えるのはsystem_clockということ)。
>>426以降は妄想が迷走してるだけに見えるかな。
>>430は新しい事実で>>393の謎も解けたしもう俺的に不思議な部分はない。
432: 2021/09/25(土)17:45 ID:+JZgAVsh(1/2) AAS
> プリエンプションの機会
機会を与えないことができるのは昔のWindowsだろ
433: 2021/09/25(土)18:35 ID:8CcFj4Yb(1) AAS
今だって邪魔できるよ
消極的ではあるけど
434: 2021/09/25(土)18:44 ID:+JZgAVsh(2/2) AAS
割り込み禁止命令が実行できたり
割り込みコントローラにコマンド出せたりする
デバドラかMODESETみたいのないと無理だよ
435: 2021/09/26(日)12:46 ID:9lvhFgGq(1/3) AAS
std::complex<double> の変数 a, b について、OpenMP の並列リージョン内での
#pragma omp atomic
a += b;
が
error: invalid expression type for '#pragma omp atomic'
というエラーを出すんですが、std::complex はアトミック演算の対象外ですか?
それとも他の何かを見落としてる可能性がある?
436: 2021/09/26(日)13:03 ID:4UIlewCz(1/3) AAS
ompのAPI仕様書を読むと対象はスカラー型のみって書いてあるから対象外なんじゃないの?
437: 2021/09/26(日)13:04 ID:4UIlewCz(2/3) AAS
ここのx and vってとこ
外部リンク[html]:www.openmp.org
438(2): 2021/09/26(日)13:07 ID:9lvhFgGq(2/3) AAS
数学とか物理の用語としては複素数はスカラーですが、コンピューター用語としては違うんでしたっけ?
439: 2021/09/26(日)13:18 ID:loHIOGgF(1) AAS
確かモルダーを疲れさせる女のこと
440: 2021/09/26(日)13:28 ID:pztAGZv/(1) AAS
対象外
ぷりみ恥部とPOD以外だめ
441(1): 2021/09/26(日)14:59 ID:4UIlewCz(3/3) AAS
>>438
std::complexはclass型だよ。c++では
442: 2021/09/26(日)15:02 ID:9lvhFgGq(3/3) AAS
>>441
つまりatomicはプリミティブ型だけ想定してるってことですかね
ありがとうございます
おとなしくクリティカルセクションにします
443: はちみつ餃子 ◆8X2XSCHEME 2021/09/27(月)00:54 ID:vtQXnC4F(1) AAS
>>438
C++ におけるスカラ型の定義
・ 算術型 (整数型と浮動小数点数型)
・ 列挙型
・ ポインタ型
・ メンバへのポインタ型
・ std::nullptr_t
・ 以上を cv 修飾 (const や volatile で修飾) したもの
外部リンク:timsong-cpp.github.io
言語によって定義は異なっている (または定義を持たない) ので
省1
444: 2021/09/27(月)06:07 ID:vzE92GBt(1) AAS
ここはC++スレだからC++用語で必要充分だ
無理に一般化する必要はない
445: 2021/09/27(月)08:56 ID:P6ytpwfT(1) AAS
複素数が「算術型」じゃないのって冷静に考えるの結構奇妙だな
446: 2021/09/27(月)19:18 ID:LR1S7vXs(1) AAS
複素数を直接扱う命令がないCPUが多い以上、小数2個で表される複素数がスカラではないのは自然だと思うけど
それを言い出すと、一般線形群と呼ばれる行列はなんでも算術型になるのではないか?と思えてくるし
447(1): 2021/09/27(月)19:25 ID:n9hc+rIL(1) AAS
arithmeticを「算術」とか仰々しく訳すからおかしくなる
要は小学生がさんすうで習うような単純な数のことよ
448: 2021/09/27(月)22:16 ID:D7AKGDxr(1) AAS
そもそも数学でも複素数はスカラじゃないよな
449: 2021/09/27(月)22:19 ID:sGjfmd1K(1) AAS
ベクトルの係数になるんだから基本的にスカラじゃねえの
450: 2021/09/27(月)22:43 ID:PI7czi9F(1) AAS
スカラーだったりベクトルだったりするらしい
外部リンク[htm]:izumi-math.jp
451: 2021/09/27(月)22:51 ID:GPisoDJi(1) AAS
複素ベクトル空間の係数体の元として見ればスカラだし複素数体を実ベクトル空間と見れば複素数は実ベクトル
452(1): 2021/09/28(火)07:58 ID:ZoUlFxaV(1) AAS
除算が定義できる体なので普通はスカラーとして扱うと思うけどな。
2要素の実ベクトルや2自由度の行列に適切な演算を導入することによって同一視することはできる。
453: 2021/09/29(水)10:21 ID:QYKzykPR(1) AAS
>>447
要は小学生がさんすうで習うような単純な数のことを「算術」と言うんだが
454(1): ハノン ◆QZaw55cn4c 2021/09/29(水)18:51 ID:+NS+8RdU(1) AAS
>>452
>2自由度の行列に適切な演算を導入
有名な a b -b a 以外にも複素数と同様に振舞う行列を定義できるものでしょうか?それはどんな形?
455: 2021/09/29(水)19:37 ID:F6bYTA4Q(1) AAS
好きなX^2=-Iを満たす行列Xを用意すればaI+bXが複素数の表現になるよ
456(1): 2021/09/30(木)04:33 ID:a96KQdEj(1) AAS
>>454
> 有名な a b -b a 以外にも
> 複素数と同様に振舞う行列
この世のことを何一つとして理解してないことがよく伝わってくる2フレーズ
457: 2021/09/30(木)10:27 ID:rsDh5L5E(1) AAS
i 0
0 i
458: 2021/09/30(木)12:07 ID:CrfxKotF(1) AAS
複素数z=x+iy (x, y:実数)とした場合どうやって行列で表現できるのか分からん
そもそも無理だろ
459: 2021/09/30(木)12:15 ID:LH+TfD4u(1) AAS
いい加減スレチだぞお前ら
460(1): 2021/09/30(木)12:39 ID:HqpdIwHE(1) AAS
複素数の実行列表現あたりで調べれば出てくるから自分で調べろ。
複素数ライブラリの実装は行列表現だろ。
461: 2021/09/30(木)14:36 ID:rqtJMe+2(1) AAS
承認欲求が満たされなかったキチガイのハ◯ンが荒らしてるんだな
462: ハノン ◆QZaw55cn4c 2021/09/30(木)21:06 ID:SS5VJirH(1) AAS
>>460
キーワードありがとうございます!
1, 1, -2, -1 とか 3, 2, -5, -3 とか i に対応するものはいろいろあるんですね
>>456
生きていてすみません
463: 2021/09/30(木)22:32 ID:hyVGcxZ+(1) AAS
複素数ライブラリの実装が行列表現な訳ないだろ
464: 2021/10/01(金)04:28 ID:YSb3+a7i(1) AAS
パウリ行列やで
465: 2021/10/01(金)08:55 ID:wyBR1P+Z(1) AAS
それは四元数では
466: 2021/10/01(金)11:45 ID:o+E+DUKy(1) AAS
そもそも勝手な演算❎とかを用意して、それを複素数の演算になるような演算規則にすればいいだけの話
普通のプログラミング言語での実装は2要素ベクトルに対して複素数積となるような演算を*に対応させているんだと思うけどな
行列積が複素数の積と同一視できるような表現行列があるというだけ
群論とか環論とか体論とか入門的にでもやればわかるよ
467(1): 2021/10/02(土)13:55 ID:cR/mfYmg(1/5) AAS
ベクトルの要素は座標変換で変わるからスカラーではない
468: 2021/10/02(土)13:59 ID:cR/mfYmg(2/5) AAS
まつがえたorz
誤: 変わるから
正: 変化すっから
469: 2021/10/02(土)14:34 ID:7v0dyN4q(1) AAS
物理屋さんか?
470: 2021/10/02(土)14:56 ID:cR/mfYmg(3/5) AAS
んまーたしかに物理現象は座標変換しても変わらない(同じもの)とみなすのが
物理の先生なのかもしれん スカラーもそん延長線上の概念
しかし観測が系に影響を与えると言い出した時点でいつまで真理でありつづけることやら……
471: 2021/10/02(土)20:42 ID:xJ5F1jwy(1) AAS
>>467
言葉足らずだったかもしれないが、複素数体と数学的にはR2の正規直交基底かつ基底の長さが1のベクトルの成分表示を、適切な演算を入れることによって同一視することができるという話をしているのであって、一般的なベクトル空間の話をしている訳ではない。
472: 2021/10/02(土)21:15 ID:cR/mfYmg(4/5) AAS
スカラーか否かというのは数をどこに使うかの話であって
数をどう表現するかの話ではないし、
473: 2021/10/02(土)21:16 ID:cR/mfYmg(5/5) AAS
それはそうとしてR^2と言っただけでは計量が入っていないから(平行移動も糞も無いため)ベクトル空間ではない
つまり { ベクトル空間 } ⊂ { R^2 } であってR^2の方がより一般的
R^2上で実数と同じ7つの演算則を満たす演算を形式的に定義することはできるが|i|=1を表すために
>正規直交基底かつ基底の長さが1のベクトルの成分表示
が必要になるから複素数体を正確に言い表すにはR^2ではなくてユークリッド空間か何かが要ることになるんじゃないの
474: 2021/10/02(土)22:42 ID:5uoG6j9g(1) AAS
加法(V × V → V)と係数体による倍演算(K × V → V)が入ってて線型ならベクトル空間だよ, 計量入れたら計量ベクトル空間
475(3): 2021/10/05(火)17:00 ID:YgA3J5wy(1) AAS
関数の引数に参照渡しで何も渡さないようにするはどうすればよいですか
自作クラスAがあったとして、それを引数にとる関数
void hoge(int& p1, A& p2)
があります。
ただ、p2は、ケースによっては要らない場合もあって、その場合にはどうすればよいですか。
調べてみたらnullptrみたいなのはあったので、
int p1 = 1;
hoge(p1, nullptr);
と書いてみても、
非constの左辺が何とかとエラーが出て、渡せませんでした。
476(2): 2021/10/05(火)17:34 ID:lBT+65cn(1/3) AAS
*nullptr
477(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/05(火)17:41 ID:krkmojOq(1/3) AAS
>>475
参照は何も参照していない状態というのは作れない。
参照で受け取るように書いてあればその参照が無効ということはあり得ないという表明として解釈するのが通例。
(実際にはダングリング参照はあり得るけどそれは単に間違ったプログラムなので気にしない。)
引数として不要なのであればオーバーロードで引数が不要な関数も用意するのが真っ当な方法だけれど、
どうしても無効ということを表す状態を渡したいということであればダミーのオブジェクトを作っておいて
それを無効の意味に使うという方法は考えられる。 (不格好だけど……。)
#include <iostream>
struct A {};
A dummy;
省11
478: 2021/10/05(火)17:45 ID:UD2fraRe(1) AAS
NullObjectパターンすね
479: 2021/10/05(火)17:48 ID:lBT+65cn(2/3) AAS
hoge(p1,* static_cast<A*>(nullptr));
480(2): 2021/10/05(火)17:49 ID:3jRalumJ(1) AAS
>>476
*(A *)nullptr にしないとエラーになるな
そいで関数側で&p2==nullptrでnullptrが渡されたかどうかチェックできるね
でもこんなの許されてるの?
481: はちみつ餃子 ◆8X2XSCHEME 2021/10/05(火)17:52 ID:krkmojOq(2/3) AAS
>>476 >>480
当然だけど (空ポインタを含めて) 無効なポインタをデリファレンスしたらその時点で未定義。
482(2): 2021/10/05(火)19:00 ID:lBT+65cn(3/3) AAS
何いってんだ
キチンと動作する
ただの参照なんだから未定義じゃないだろ
他の変数に受け渡してるワケでもないし
483: はちみつ餃子 ◆8X2XSCHEME 2021/10/05(火)19:59 ID:krkmojOq(3/3) AAS
>>482
実質的な (コンパイルされた後の) 動作として値を取り出す必要がないというのは、
言語仕様上において * の適用を無かったことに出来るわけではない。
(C には単項 * の結果に単項 & を適用した場合に相殺されてどちらも無かったことになる規則があるが……。)
484: 2021/10/05(火)20:26 ID:SwNxahaG(1) AAS
また未定義動作なんか怖くない君か
命知らずなのはいいけどチームプログラミングには関わらないでね本当に迷惑だから
485(1): 2021/10/05(火)20:32 ID:7rL/DhC7(1) AAS
1. 参照をやめてポインタにする
2. std::optional<T>を使う(C++17以降)
俺ならこのどっちか
486: 2021/10/05(火)22:18 ID:bhHmmGon(1/3) AAS
クラスTが自作クラスなら
Tにnulを意味するlオブジェクトを定義すれば良い……
>>477なdummyオブジェクト方式はテンプレートの中で使いにくくなるいはず
>>485なstd::optional<T>案はどうせ余計な記憶を要するのだからT固有のnullを定義するうのとイーブン
487: 2021/10/05(火)22:24 ID:bhHmmGon(2/3) AAS
もちろんT固有のnull「値」の定義においては
オブジェクトの参照 == null値、
はアドレスの一致ではなく値の一致として解釈されねばならな
い
488: 2021/10/05(火)22:44 ID:bhHmmGon(3/3) AAS
さもないと、クラスTのnull値をT_NULLみたいな名前にしたとして、
T arr[] = { T_NULL, T_NULL, T_NULL, T_NULL };
みたいなことができないか
らな
489(1): 2021/10/06(水)00:36 ID:meWA0K5y(1) AAS
>>480,482
gcc 11 の -O2 で「&p2==nullptrでnullptrが渡されたかどうかチェック」はできなかった。
外部リンク:wandbox.org
490: 2021/10/06(水)00:55 ID:E9G/hK4q(1/4) AAS
void hoge(int& p1, optional<A>& p2 = nullopt) { // constじゃないのでエラー
みたいなことってoptionalで上手いことやる方法ないの?
呼び出し元は
int i;
A a;
hoge(i, a);
hoge(i);
みたいな感じで
書き換えられるけどhogeから抜けたら消える初期値nulloptのoptional<A>をデフォルト値で渡せるのか知りたい
491: 2021/10/06(水)01:23 ID:V3EBITWg(1/2) AAS
なにいってんだおめ
492: 2021/10/06(水)01:31 ID:V3EBITWg(2/2) AAS
nullopt以外が渡されたらそのA&に対して、
nulloptが渡されたらスタックにAを構築したうえでそのA&に対して操作したい、ってこと?
それはvoid hoge(int& p1, A& p2 = デフォルト値)でいけるんじゃないかい
493(1): 2021/10/06(水)01:49 ID:E9G/hK4q(2/4) AAS
伝わらないようなので、コード書きました
外部リンク:wandbox.org
494(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/06(水)03:08 ID:3d8zh1Pt(1) AAS
>>493
やりたいことは std::optional<A>& ではなくて std::optional<A&> 的なことだろ。
しかし std::optional は参照を保持できないのでそういうときのために std::reference_wrapper がある。
コードにしたらこんな感じ。
外部リンク:wandbox.org
495: 2021/10/06(水)06:31 ID:lNsYT/rw(1) AAS
部分特殊化できないのは関数テンプレートだよな
template<class T1, class T2>
struct test {
void fig1();
void fig2();
void fig3();
};
template< > void test<void, void>::fig1(); //ok
template<class T1> void test<T1 , void>::fig2(); //error
template<class T2> void test<void, T2 >::fig3(); //error
省1
496(1): 2021/10/06(水)06:43 ID:Cv4NDZSF(1/2) AAS
その部分特殊化されたtest(構造体)が定義されてないからだね
先にtestの部分特殊化を書けば通る
497(1): 2021/10/06(水)07:59 ID:E9G/hK4q(3/4) AAS
>>494
std::reference_wrapperは知りませんでした
std::optional<A>をstd::optional<A*>にしてconstのままいじれるようにした気分なので
実質無理ってことなのかなぁと思いますが…
ありがとうございます
498(1): 2021/10/06(水)08:17 ID:fON1wZ9Y(1) AAS
>>475
普通はオーバーロードだな。デフォルトを指定させたいのならnullobjectを始めとする定数オブジェクトかね。
nullポインタとか空のスマートポインタとかはエラーの元だから避けたいところ。
499: 2021/10/06(水)08:26 ID:E9G/hK4q(4/4) AAS
>>497
自己レスです
いずれにしても呼び出し元を変更せずに要件を満たせそうな唯一の方法っぽいので解決ですね
(私は>>475ではありません)
500: 2021/10/06(水)08:34 ID:4yqQ2QZ4(1) AAS
今は継承はなるべく使わない、がデフォなのかな
501: 2021/10/06(水)09:11 ID:lTl3I+RT(1/2) AAS
クラステンプレートがナウい
502: 2021/10/06(水)09:13 ID:lTl3I+RT(2/2) AAS
とはいえ、いきなりテンプレートにするのはハードル高いので、
結局は、継承クラスをいくつか作ってみてテンプレート化を試すことになる
上下前次1-新書関写板覧索設栞歴
あと 500 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.047s