[過去ログ] C++相談室 part157 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
834(1): ハノン ◆QZaw55cn4c 2021/10/23(土)01:34 ID:0KDU0Kot(2/2) AAS
>>832
うん、実用に供するまでには結構大変そう、使い道がわからん…
835(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)01:57 ID:UQ/XjfNb(2/4) AAS
>>834
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。
根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。
836: 2021/10/23(土)08:10 ID:LycCK1PV(1) AAS
void*よりはちょっとマシって程度の感覚だな
837(1): 2021/10/23(土)10:04 ID:rMqegMI3(1) AAS
>>832
その後の使い方は、基本的には
全要素をany_castでstringにして使うつもりです。
不定型可変長のデータを受け取ってcsvファイル出力に使いたい感じです。
838(1): 2021/10/23(土)10:05 ID:bwy1yWHL(1) AAS
void*「むかしはあんなに愛してくれたのに…」
839: 2021/10/23(土)11:08 ID:FGy8rv7m(1) AAS
>>830
any使うんだったら、
vector<vector<any>> hoge;
じゃなくて
vector<any> hoge;
じゃない?
840(1): 2021/10/23(土)11:40 ID:KcnUiVki(1/2) AAS
>>835
>>833じゃないけど>>833のdump()を例えば
template<class... Args>
void dump(const std::variant<Args...>& e) {
std::visit([](const auto& x){
std::cout << " " << x << std::endl;
}, e);
}
template<class V>
void dump(const std::vector<V>& v) {
省9
841(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)13:07 ID:UQ/XjfNb(3/4) AAS
>>840
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。
型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。
842: 2021/10/23(土)13:12 ID:quaWTEll(1) AAS
C++はパラメトリック多相が無いからこういうのは面倒だよね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。
conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。
843: はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)13:16 ID:UQ/XjfNb(4/4) AAS
>>837
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)
最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。
844: 2021/10/23(土)14:23 ID:KcnUiVki(2/2) AAS
>>841
まあそうだよね。ありがとう。
845(3): 2021/10/24(日)08:17 ID:mo2+vXTQ(1/2) AAS
AA省
846: 2021/10/24(日)08:20 ID:mo2+vXTQ(2/2) AAS
>>772
コードブロック内のreturnがあるかもしれないんならチェックすれば良いやん?
>>763は普通の人ならチェックするでしょ、という主張
ところが>>722のような例外安全主義者ときては、RAII = 例外安全、で脳がショートしているのや
多分周りも能力に忖度して大した課題を与えていないんだと思う
847: 2021/10/24(日)08:40 ID:i4dOTOfz(1/2) AAS
上では例外安全にするとかしないとか言っていたような気がしたが少し主張が変わったのかな。
- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない
結論としてはこんな感じだと思うが。
848: 2021/10/24(日)08:41 ID:7jz7Y9vl(1) AAS
チェックして例外出さないと解放されないコード書いたのか…
849: 2021/10/24(日)09:13 ID:1SVJ9Wvp(1) AAS
そりゃ例外安全もRAIIも魔法じゃないんだから使えば即安全になるというわけじゃないわな
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ
850: 2021/10/24(日)09:51 ID:v4numFpL(1) AAS
>>845
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話
逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?
851: 2021/10/24(日)10:24 ID:P2kmr3bK(1) AAS
そもそもRAIIが例外安全のためっていうイメージ全くないんだけど
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?
852: 2021/10/24(日)10:36 ID:i4dOTOfz(2/2) AAS
例外が発生するとリソースを片付け損ねる場合があるってのが例外安全を欠く一番よくあるケースだと思うけど。
主目的がどうとかは別として。
853: 2021/10/24(日)10:45 ID:NLtlOSxj(1) AAS
>>845
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう
Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね
854: 2021/10/24(日)10:47 ID:KyFc3YJo(1/4) AAS
結局コードがないのでまた空中戦になってますね
855: 2021/10/24(日)11:38 ID:IQSwOnqn(1) AAS
例外でデストラクタ呼ばないケースなんてあるんですか?
プログラム自体が止まるのは別として
856: 2021/10/24(日)12:07 ID:KyFc3YJo(2/4) AAS
リマインダー>>731
857(3): 2021/10/24(日)14:38 ID:KyFc3YJo(3/4) AAS
これg++ 9.3だとstd::endlがなぜかconst variant<>と思われてエラーになってるみたいなんだけど、なぜ?
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
}
int main() {
省4
858: ハノン ◆QZaw55cn4c 2021/10/24(日)15:13 ID:rOnHPdOM(1) AAS
>>838
「「最初から void * な実体」は作らない」「void (*)(void *, ...) くらいまでがせいぜいだ」というように努めていた私は愛し方が足りなかったのでしょうか?
最近の愛し方:2chスレ:tech
859(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/24(日)18:37 ID:SzIAMYLD(1) AAS
>>857
std::endl は関数テンプレートなので型と比較しようとするとインスタンス化に失敗するというエラーだと思う。
(std::endl を普通に使うときは左辺の型を利用して推論される。)
型を明示して渡せば variant との比較に失敗して通常の改行として解釈してくれる。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
省6
860(1): 2021/10/24(日)19:35 ID:KyFc3YJo(4/4) AAS
>>859
う〜ん、よく分かりませんね。確かに勝手にendlは[with _CharT = char; _Traits = std::char_traits<char>]なbasic_ostreamを
引数にとって返すと想定しちゃってましたが、その時点でインスタンス化しようとしてエラー出す理由が分からない・・・
例えばテンプレート引数を直指定しても
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
省8
861(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/25(月)00:43 ID:dRHq7DJG(1/3) AAS
>>860
左辺が曖昧だからかもしれない。
左辺の型を std::ostream で固定すれば通る。
#include <variant>
#include <iostream>
using namespace std;
template<class C, class... Args>
std::ostream& operator<<(std::ostream& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
省7
862: 2021/10/25(月)02:18 ID:LmZJdmU+(1/3) AAS
>>861
度々ありがとうございます。再現確認したところ、確かに余計なテンプレート引数が1つあるだけでこのエラーが出ないみたいですね。
試しに元のコード(>>857)に余計なパラメータを1つ入れるだけでも通りました。
#include <variant>
#include <iostream>
using namespace std;
template<class T, class C, class... Args> // ダミーパラメータT追加
C& operator<<(C& out, const variant<Args...>& v) {
visit([&](auto& x){out << x;}, v);
return out;
省8
863: 2021/10/25(月)02:19 ID:LmZJdmU+(2/3) AAS
最後のコードは右上の設定ボタンから -std=c++17 を追加することで実行できます。
864: 2021/10/25(月)13:57 ID:p1HT8A4i(1) AAS
iostreamのシフト演算子オーバーロードは文句を言われてるがrangesのoperator|のオーバーロードはどうなんですかね
865: はちみつ餃子 ◆8X2XSCHEME 2021/10/25(月)14:01 ID:dRHq7DJG(2/3) AAS
感覚的にはまあ順当だろうと思う。
日付やパスで / を使うのに比べればよっぽど……。
866(2): 2021/10/25(月)15:38 ID:x4U5y7kU(1) AAS
組み込みの意味を持たないオーバーロード専用演算子があれば良かったのにな
用意しておかなかったのはC++の初期デザインの失敗だったと思う
867: 2021/10/25(月)16:09 ID:SLeimCOK(1) AAS
意味を持たない演算子が意図せず呼ばれてしまうくらいならコンパイルエラーになったほうがマシでは
868: はちみつ餃子 ◆8X2XSCHEME 2021/10/25(月)17:28 ID:dRHq7DJG(3/3) AAS
ところで Haskell で一定の記号の組み合わせは何でも新しい演算子として定義できる仕組みがある。
!#$%&*+./<=>? あたりとその他 Unicode 内いくらかも含めた組み合わせで演算子を作っていい。
優先順位も決められるし左結合か右結合かも決められる。
事実上無制限に違う字面の演算子を作れるんだよ。
<?+> とか #-. とか <<-~ みたいな演算子が実際に使われてるわけ。
こういう極端なのはさすがにあまりうらやましくはないよな……。
>>866
かといって有限の演算子をある程度に多く用意したところでオーバーロードを許すなら
どこかで全然違う意味で使われることもあるのは避けようがないし、
C++ くらいにスッパリと諦めるのもそれはそれで思い切りが良くて良いと思う。
869: 2021/10/25(月)17:51 ID:s1VnbLSn(1) AAS
演算子ってのはwellknownだからこそ意味があると思うんだけどな
演算子のオーバーロードもその“意味”から大きく逸脱しないことを求めていたと思うし
意味を持たないオーバーロード専用演算子ってのは
プログラマーによって意味が真逆になりかねないから危険だと思う
そんなことするぐらいなら普通に名前を付けて関数定義したほうがマシに思える
870(1): 2021/10/25(月)17:56 ID:5fKOgArh(1) AAS
そこら中訳わかんない記号だらけのソースとか悪夢でしかないなw
871: 2021/10/25(月)18:04 ID:LmZJdmU+(3/3) AAS
>>857の原因判明しました。
同一の問題がstackoverflowで解決されていたのでリンクだけ貼っておきます。
外部リンク:stackoverflow.com
上記に従った対策コードは以下のとおりです。
外部リンク:godbolt.org
872: 2021/10/25(月)20:01 ID:VZsrHh6g(1) AAS
>>866
リザーブの演算子持っとけって言いたいんだろうけどこう言う奴はいくつ持ってても足りねーとか言うからw
873: 2021/10/25(月)21:34 ID:3IW01+t9(1) AAS
演算子オーバーロードって自分で書くにはいいけど他人のコードを読むのが地獄だな。
874(2): 2021/10/25(月)21:35 ID:EqTxifVC(1) AAS
while (fread(&x, sizeof(double), 1, fin) > 0) {
fprintf(fout, "%5.4f\n", x);
}
こんな風に書くとコベリティ君がfreadは読み込んだバイト数を返すが使っていませんみたいなこと言い出すんだが
は?使ってますけど?みたいな気持ちしかないんだけど
何を求められてるんだろうか。
875: 2021/10/26(火)06:12 ID:lDQyydUS(1) AAS
>>874
そんなのシノプシスに聞けよ…
876: 2021/10/26(火)06:48 ID:ch+2e+/f(1) AAS
>>870
昔のAPLとかかw
877: 2021/10/26(火)08:08 ID:a/qQal0X(1) AAS
演算子に限らず、ある関数を特定の名前空間の内部だけ使えるように限定できたっけ?
「あるスコープだけこういう使い方」ならまだ混乱も少ないかね。
878(1): 2021/10/26(火)08:14 ID:FOkaXEb/(1) AAS
ん? それこそが名前空間の可視性制御だろ
879: 2021/10/26(火)08:14 ID:X4knYEql(1/2) AAS
関数内で構造体を定義し、その中でstatic関数を定義する
880: 2021/10/26(火)08:15 ID:X4knYEql(2/2) AAS
あ、違った
class内のprivate関数でいいんじゃね
881(1): 2021/10/26(火)08:27 ID:cqUp+YH+(1) AAS
>>878
名前空間の外にお漏らししないようにできたっけ?
同じ名前空間にクラス定義しなければADLも気にしないでいいのかしらん。
882(1): 2021/10/26(火)09:22 ID:tIXOLnPL(1) AAS
>>881
この手の話?
外部リンク:cpp.aquariuscode.com
883: 2021/10/26(火)10:05 ID:I5hwU/3x(1) AAS
>>874
fprintfはええんか?
884: 2021/10/26(火)10:21 ID:g/XkL0k7(1) AAS
niebloidの出番じゃないの?演算子オーバーロードには使えないが
885: 2021/10/26(火)12:31 ID:E+rw0Wy/(1) AAS
>>882
そうそう、そんな感じ。
実際には演算子を閉じ込めたい名前空間の中でクラスを定義しなければADLは影響しないけど、もし定義するとしてもこの技法で回避できそうだね。
886: 2021/10/26(火)12:54 ID:FaeDWsHu(1) AAS
今日もまた単発IDの曖昧発言onlyですね
887: ハノン ◆QZaw55cn4c 2021/10/31(日)10:43 ID:hT9enBIH(1) AAS
テステス
888(1): 2021/11/01(月)17:04 ID:uZUsIwlp(1/2) AAS
std::function を引数にとる関数を作ってるんだが、参照で渡すのとコピーで渡すのでどのように動作が変わるかわからない
参照で渡して良いですか
889: 2021/11/01(月)17:28 ID:2TKPTRzu(1) AAS
std::funcて中身は関数ポインタ―でしょ
コピーで済むものを参照で渡す必要はそもそもないんじゃないの
受け取り先で書き換えて返すなら別だけど
890(1): はちみつ餃子 ◆8X2XSCHEME 2021/11/01(月)17:29 ID:w5vOXkrp(1/2) AAS
>>888
「引数にとる」というのは実引数の型も std::function 型という意味?
891: 2021/11/01(月)17:41 ID:ja4QDiEt(1/2) AAS
保存目的なら値渡しのほうがよいらしい
外部リンク:stackoverflow.com
892(1): 2021/11/01(月)17:42 ID:P2kjdACs(1) AAS
コピーだろー
893(1): 2021/11/01(月)17:54 ID:uZUsIwlp(2/2) AAS
>>890
関数を想定しています
894: はちみつ餃子 ◆8X2XSCHEME 2021/11/01(月)17:58 ID:w5vOXkrp(2/2) AAS
>>893
仮引数の側を std::function の参照にしたところで、実引数の側が std::function ではないときは
変換して一時オブジェクトを作ってからその参照をとる形になるんだよ。
これは std::function に限らない一般原則。
どちらにしても新しいオブジェクトを構築するので参照にする意味がない。
895: 2021/11/01(月)18:35 ID:XqzqlHR8(1) AAS
クラスのメンバーにstd::functionをいくつか用意しておいて、
条件によりどれかのstd::functionを引数に取るprivateなメンバ関数とかなら参照にする意味はあるかもしれないw
896(3): 2021/11/01(月)19:28 ID:Qg2QcgLf(1) AAS
この流れで質問をば。
std::functionだと単体のR opetator()(Arg...)しか指定できないけど、複数のメソッドを指定できるように拡張するにはどうしたらいいかしらん?
継承じゃなくてtype erasure を使ったgeneral smart pointerとでもいうようなやつが欲しいんだけど、どこかに実装ないかなぁ。
897: 2021/11/01(月)19:49 ID:Iw+wFADq(1) AAS
anyの使いどころ?
898: 896 2021/11/01(月)20:35 ID:0sJcc+2w(1/2) AAS
anyだとメソッドを呼び出せないから機能が足りないですな。
メソッド呼び出しできるインターフェイス付きanyみたいな感じ。
用途は「指定したメソッドがあれば継承関係無しでブチ込める親クラスみたいなanyみたいなshared_ptr」だけど。
899: 2021/11/01(月)20:39 ID:ja4QDiEt(2/2) AAS
理解できてないけど普通のテンプレート引数を持つ関数じゃいかんの?
900(1): 896 2021/11/01(月)21:35 ID:0sJcc+2w(2/2) AAS
Haskellの型タイプというのがイメージに近いか。
具体例をだしてみると、
class A { public: string test1() { return string("A1"); }; string test2() { return string("A2"); }; };
class B { public: string test1() { return string("B1"); }; string test2() { return string("B2"); }; };
vector<generic_ptr<string test()>>c;
c.push_back(make_shared<A>());
c.push_back(make_shared<B>());
c[0]->test1(); // A1
c[1]->test1(); // B1
c[0]->test2(); // A2
省4
901(1): 2021/11/01(月)22:33 ID:JtJuMIHt(1) AAS
>>900 外部リンク:www.google.com
902: 896 2021/11/02(火)00:28 ID:F29rpsLU(1) AAS
>901
ありがとう。こういうのもあるのね
……でも BOOST_TYPE_ERASURE_MEMBER を使ったコンセプトがWandboxで上手く動かないなぁ。
もうちょっと試してみるか。
903(1): [sega] 2021/11/02(火)10:51 ID:7a5iqwfV(1) AAS
std::thread で作られるスレッドって
スタックサイズはデフォルトいくつなん?
変更とかできるん?
904: 2021/11/02(火)10:59 ID:oKrr57AH(1) AAS
>>903
スタックなんて概念がないのに制御できるわけがない
905: 2021/11/02(火)11:48 ID:LR6fq+wY(1/3) AAS
linuxならulimit -sかpthread_attr_setstacksizeで設定できる
ただ確保されるのは仮想メモリなので現実的にはその設定あんまり使い所がない
そしてC++とか関係ない
906: 2021/11/02(火)13:09 ID:TehqQXLJ(1/2) AAS
stdよりposixのほうが洗練されてるよな
907: 2021/11/02(火)17:28 ID:LR6fq+wY(2/3) AAS
何いってんの?この人
908: 2021/11/02(火)19:04 ID:TehqQXLJ(2/2) AAS
意味わかんなくてpthread使ってんなら相当頭悪い
909: 2021/11/02(火)19:13 ID:U4IKz2Wy(1) AAS
むだに喧嘩すんなよ
910: 2021/11/02(火)19:28 ID:LR6fq+wY(3/3) AAS
比較対象がおかしいんだからしょうがなくね?w
911(2): 2021/11/05(金)00:18 ID:2vTbLoUN(1) AAS
基底クラスに定数持たせるけど値は継承先で決めたい。
例)Carクラスには計算に使うが変更はしない定数 weight hight width があり、それは継承した車種クラス毎に異なる、など。
下記でコンパイル通るようですが、定数増えると見づらく、もっとスマートなやり方あったらご教授願いたく。
class Car
{
protected:
const double weight, height, width;
public:
Car(double w, double h, double wd)
: weight(w)
省8
912(1): 2021/11/05(金)00:22 ID:O1PLiy99(1) AAS
別に普通だと思うけどどの辺が見づらいと思うんだ?
913: はちみつ餃子 ◆8X2XSCHEME 2021/11/05(金)01:26 ID:8QrXrM3i(1/4) AAS
値が const であるだけでなく static であって欲しいという意図なんじゃないかと想像する。
914: 2021/11/05(金)01:29 ID:zGuhJhpK(1) AAS
クラステンプレート化すればいいじゃない
template<double W, double H, double WD>
915(1): 2021/11/05(金)01:41 ID:gd3zcTPm(1/3) AAS
doubleってテンプレート引数OKになったの?
916: はちみつ餃子 ◆8X2XSCHEME 2021/11/05(金)01:48 ID:8QrXrM3i(2/4) AAS
>>915
C++20 で非型テンプレート引数の大幅な緩和があった。
917: 2021/11/05(金)02:25 ID:Xs8oV2Az(1/2) AAS
C++20では普通に使えるかもだけど、引数に名前を付ける風のトリックがあるらしい
外部リンク:www.fluentcpp.com
918(1): 2021/11/05(金)05:55 ID:caWVwyr0(1) AAS
>>911
virtual double weight() const = 0;
じゃあかんの?
919(1): 2021/11/05(金)06:25 ID:8h2e+y9J(1) AAS
>>912
引数が数値ばかりで10個とかあると確かに何を指定してるのかぱっと見わかんなくなりそう
C++なら>>918に一票だけど参照する時に ( ) が要るからこう言うケースだとC#のプロパティが欲しくなる
920(1): 2021/11/05(金)07:38 ID:gd3zcTPm(2/3) AAS
C++20で指示付き初期化が出来るようなので、もしC++20が使えるなら定数を構造体にまとめたらいいかも
外部リンク[html]:cpprefjp.github.io
921: 2021/11/05(金)08:22 ID:OHT8JXtH(1) AAS
>>911
Builderパターンとか?
面倒だったらDirectorクラスは省略しても問題なさそう。
類型的な車種ごとにBuilderを派生させてデフォルト値を決めといてもいいかと。
922(1): 2021/11/05(金)12:38 ID:gSSLx8YQ(1) AAS
>>919
参照するときに()ていうのは
a=car.weight(); ていうこと?
a=car.weight; と表記したいならoperator=をオーバーロードすればいいかと
923(1): 2021/11/05(金)13:46 ID:Xs8oV2Az(2/2) AAS
>>920
C++20で使えるのそれそれ。gccでは元々使えるけど...
924: はちみつ餃子 ◆8X2XSCHEME 2021/11/05(金)13:57 ID:8QrXrM3i(3/4) AAS
>>923
C (C99 以降) には有るからついでに C++ でも使えるようにするのは gcc 的にはたいした手間でもなかったんだろうと思う。
925(1): はちみつ餃子 ◆8X2XSCHEME 2021/11/05(金)14:01 ID:8QrXrM3i(4/4) AAS
ところで C の designated initializer では配列要素を指示することも出来るんだけど、 C++20 にはこれは入らなかったんだね。
↓ こういうの。
const char *foo[5] = {
[2]="bar"
};
926: 2021/11/05(金)14:04 ID:XqgFcDRs(1) AAS
c++17以前でも引数を構造体にまとめれば{}で区切って記述できるようになるから多少マシにはなるよね
IntelliSenseが効きにくくなるのが欠点だけど
927: 2021/11/05(金)14:10 ID:TiWO+rcp(1) AAS
>>922
君は何を言っているんだい?
928(1): 2021/11/05(金)14:27 ID:7LuUsMxr(1) AAS
そのCの記述素晴らしいよね
C++的でないのはわかるがどうせ初期化時でしか使わんのだしとっとと入れるべきだった
929: 2021/11/05(金)16:10 ID:gd3zcTPm(3/3) AAS
>>925 ラムダ式のキャプチャと競合するためと書いてるね
930(2): 2021/11/07(日)16:47 ID:qipzvPRM(1) AAS
外部リンク:ideone.com
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T>
// template <class T, size_t C=MAX_SIZE>
class SizeLimitedAllocator {
public:
省21
931: 2021/11/07(日)17:51 ID:ISiN+sDp(1) AAS
>>928
aggregate限定だね
932: 2021/11/07(日)17:56 ID:Mdbpk+F7(1) AAS
>>930
外部リンク:en.cppreference.com
> rebind is only optional (provided by std::allocator_traits) if this allocator is a template of the form SomeAllocator<T, Args where Args is zero or more additional template type parameters.
これですかね?
カスタムアロケータ自分で定義したことないのでじゃあどうすればいいかは分かりませんが……
933: 2021/11/07(日)18:53 ID:Qwz9shRh(1) AAS
rebind_allocが悪さしてたりして
上下前次1-新書関写板覧索設栞歴
あと 69 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.243s*