- 1 名前:デフォルトの名無しさん mailto:sage [2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part145 mevius.5ch.net/test/read.cgi/tech/1568362404/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語)
- 927 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:23:28.40 ID:Q+saMC6e.net]
- >>903
こらこらoverloadは多態じゃない多重定義だ 多態はpolymorphism間違えるな
- 928 名前:デフォルトの名無しさん [2019/12/15(日) 11:27:25.99 ID:LATD77rz.net]
- イテレータは演算子の実装を求められてるわけではなく、その演算子を呼び出した時の効果を求められてるだけなので、++(int)はスタックをコピーしない方法を考えた。
- 929 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:30:57.88 ID:fGq+HT2S.net]
- そこは値じゃなくてノードを返すイテレータでいいんじゃね?
必要ならイテレータ自体を拡張してもいいだろうけど、この場合はあまり応用できそうもないし。
- 930 名前:デフォルトの名無しさん [2019/12/15(日) 11:31:53.05 ID:LATD77rz.net]
- そうなのかな?
- 931 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:37:55 ID:PfQY9kAx.net]
- まずイテレータで何を抽象化したいかを明確にしなよ
ノードを意識させたいのか?
- 932 名前:デフォルトの名無しさん [2019/12/15(日) 11:38:38 ID:LATD77rz.net]
- STL風ツリーって検索しても絶対出てこないし、CIAが絡んでるような気がしてきた。
- 933 名前:デフォルトの名無しさん [2019/12/15(日) 11:39:36 ID:LATD77rz.net]
- そこがわかんないんだよねえ。
禿4とか読んでると、イテレータは位置を意味してるように思うんだけど。
- 934 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:45:00 ID:mSzJWPy5.net]
- ツリー構造
範囲が広すぎて 汎用化すると使い勝手が悪くなるからしない ってだけかと
- 935 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 11:56:45.76 ID:Q+saMC6e.net]
- recursive_directory_iteratorとかね
- 936 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 12:06:14.82 ID:mSzJWPy5.net]
- なんでdirectory?
treeでいいじゃん
- 937 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 12:22:05.91 ID:Q+saMC6e.net]
- いや立体がどうたら言ってるから
じゃあrecursive_directory_iteratorを使うユーザーのコードは いちいち多重ループだの再帰だのといった処理になるのかって 思ってさ
- 938 名前:デフォルトの名無しさん [2019/12/15(日) 12:24:23.41 ID:LATD77rz.net]
- ツリーは、あるノードの親が知りたいときもあるはず。
- 939 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:07:24.45 ID:TeOOTcIs.net]
- ごちゃごちゃ考える前にイテレータの本分を決めなよ
begin()からend()まで++で走らせた時にどうなってほしいの? 話はそれからだ
- 940 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:09:44.18 ID:MBW+LfoG.net]
- 一般にtreeの探索順序はアルゴリズムと深く結びついてるし、
そこ凝りだすと沼だぞ。
- 941 名前:デフォルトの名無しさん [2019/12/15(日) 13:09:51.26 ID:5G1zfwod.net]
- 関数ポインタをシリアライズしてファイルとして保存し、
ファイルからその関数ポインタを利用できる形に復元する方法ってあるのでしょうか?
- 942 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:13:54.57 ID:nhcuVJi8.net]
- 関数だろうが変数だろうがポインタはただの整数値でしょ
- 943 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:18:39 ID:p2D9PeH2.net]
- >>923 環境や「利用」の仕方を具体的に限定すればやりようはあるかもね。
- 944 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:20:48 ID:hicN34V0.net]
- 次に(別のプロセスで)ファイルを読み込んだときに、
元の関数を同じ番地で参照できると限らんしな。 関数ポインタの配列のインデクスなら大丈夫だろうだけど。
- 945 名前:デフォルトの名無しさん [2019/12/15(日) 13:23:00.95 ID:LATD77rz.net]
- https://ja.cppreference.com/w/cpp/iterator/reverse_iterator/operator%3D
これconstexprになってるけど、どういうときに定数になるんだろ? end()の時かな?
- 946 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:39:23 ID:2FA7t6Jx.net]
- C++20以降のvector/stringとか
使われる時にconstexprであることを妨げないようにするために付いてるんだと思う
- 947 名前:デフォルトの名無しさん [2019/12/15(日) 13:47:38.10 ID:LATD77rz.net]
- どうもありがとう。
- 948 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 13:52:49.06 ID:ph9lwYgM.net]
- constexpr関数の中で使うため。
- 949 名前:デフォルトの名無しさん [2019/12/15(日) 14:30:37.97 ID:o9m7qUoD.net]
- デストラクタがデフォルトでvirtualじゃないのは設計不良ではあるまいか
- 950 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 14:34:47.01 ID:EeC59mXx.net]
- あえてベースの方のメソッドを呼びたいなんてことあるのかね?
- 951 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 14:38:17 ID:p2D9PeH2.net]
- >>931 https://isocpp.org/wiki/faq/virtual-functions#virtual-dtor-rationale
- 952 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 15:15:03.49 ID:K1ul1r/C.net]
- >>931
C++では基本的にゼロコストでできるところはそうできるようにするポリシーだからvirtualが必要なときだけvirtualを明示的に指定させる、というのをどこかで読んだ気がする
- 953 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 15:29:48.68 ID:7Mmj/dyw.net]
- virtualでなかったら継承禁止にしても良かったんじゃないかとは思う
- 954 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:19:56.16 ID:AolOnHel.net]
- そうするとメタプログラミングに色々と支障が出たはずだし
STLも結構継承使ってるから実現出来なかったかコスト増えてるよ
- 955 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 16:52:10.11 ID:TkLVy9px.net]
- デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ
baseのポインタを使うことすらないようなもの(CRTPなど)までvirtualになるのは どうなんだろうか
- 956 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 17:01:04.52 ID:ph9lwYgM.net]
- unique_ptr使えばvirtualにする必要無いのでは?
- 957 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 17:16:05.58 ID:p2D9PeH2.net]
- >>938 んなこたーない。
shared_ptr<Base>{new Derived} なら virtual デストラクタ不要になるから、間違えて覚えてるだけでは?
- 958 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 18:59:53.87 ID:tmrMX5L5.net]
- >>937
>デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ mjk、
- 959 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 19:10:50.35 ID:AolOnHel.net]
- セオリーとして覚えてる人多いけど、何故なのかまで考えてない人が多い例の一つだね
要するにdeleteする基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ 末端のデストラクタを呼べれば、そこから基底のデストラクタを呼んでいくのは何が基底かわかりきってるから自動で出来る
- 960 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 19:29:34.24 ID:tmrMX5L5.net]
- >>941
>基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ mjk、
- 961 名前: mailto:sage [2019/12/15(日) 19:42:55.10 ID:gCPcwtH+.net]
- 永遠の初心者です、お願いします
1. 式で if 文を表現したいときは条件演算子(三項演算子 ?: )が使えますが、同じく式でループ構造を表す方法は C++11 以後にありますでしょうか? 2. 1 の質問の理由としては、C++ は Java とちがって uper() がなく、派生クラスのコンストラクタの基底クラス初期化部分に式しか書けません、ここにループを書くとすれば「コンストラクタ用メンバ関数(メソッド)」を置いていますがいかにも無様だと思っています… 3. ある既存のクラスに皮をかぶせて機能アップを図るとき、もとのクラスの派生クラスとして機能アップ部分を既述することは、よくある定石でしょうか、それともあまりしないことでしょうか? --- 以上3点の質問は以下のプログラムを書いていて感じました お題は「エラトステネスのふるい」、ただし、当初、まっとうにふるいを書いた後、機能アップ項目として 篩部分に格納する数は 2n + 1 奇数に限定する、あるいは 6n + 1, 6n + 5 の形のみに限定する 等を元の篩に対して派生クラスとして記述しました https://ideone.com/YPlfsC
- 962 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:01:24.23 ID:01f7hQnX.net]
- >>943
ラムダ式の出番かな? void test(bool flag) { flag ? []{ for(int i = 0; i < 10; ++i) cout << i; } : throw 1; }
- 963 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:05:17.27 ID:5sPbacoo.net]
- エラストテネス
6n+1, 6n+5だけ保持とかってみんな考えるよね ちなみに 巨大なテーブル作成時のパフォーマンスを上げるなら キャッシュ
- 964 名前:ェ効くよう分割処理するのが非常に効果的
スレッド分割の為にいずれにしろ分割処理は作る事になる [] - [ここ壊れてます]
- 965 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:07:01.24 ID:5sPbacoo.net]
- エラトステネス
- 966 名前:デフォルトの名無しさん [2019/12/15(日) 20:14:20.76 ID:mkXjftMX.net]
- 高分子エラストマー
- 967 名前:はちみつ餃子 mailto:sage [2019/12/15(日) 20:20:59.00 ID:jthcUe0A.net]
- >>943
初期化部分に複雑な処理をベタ書きする方が無様だと思うよ。 初期化リストの中にそんなごちゃごちゃしたこと書きたい? ワイが思うだけなので世間でどう思われてるかは知らんけどとりあえずひとつの意見として。
- 968 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 20:54:13.00 ID:TKBas8kS.net]
- >>939
親クラス(Base)のデストラクタに virtual 付けなくても... { shared_ptr<Base> obj( new Derived() ); } // ~Derived() called, then ~Base() called. ~Derived() はコールされるんですね... 確認してみて驚きました。 これができる仕組みを誰か教えてください。 スマートポインタのオブジェクトは子クラスの事何も知らないのに どうして ~Derived() のコールが可能なのでしょうか?
- 969 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:07:41.82 ID:2FA7t6Jx.net]
- >>949
いわゆるtype erasure https://blog.cryolite.net/entries/2006/01/08#p1
- 970 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:19:04.13 ID:TKBas8kS.net]
- >>950
まだ仕組みのとこまでですが理解できました。ありがとうございます。
- 971 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:24:07.01 ID:tmrMX5L5.net]
- 質問ですが構造体Fooの内側に構造体Barが定義されているという入れ子になった構造体において、
Fooの外のコードでFoo::Barのサイズをsizeof()で知りたいとき、以下は正しい? 1. C++だとsizeof(Foo::Bar)と書いたらおk 2. CまたはC++でもC互換構文の範疇で済ます場合、次のどちらかの方法でしか書けない (1) Foo::Barのインスタンスyが存在するスコープ内で、sizeof(y)と書く (2) Fooのインスタンスxが存在するスコープ内において、Foo::Bar型のメンバyをFooが持つ (Foo::yが定義されている)という条件の下で、sizeof(x.y)と書く
- 972 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:39:08.56 ID:tmrMX5L5.net]
- ふとオモタがインスタンスの必要性は無くせるかもしれん
Foo::Bar型のメンバFoo::yが定義さえされておれば、Fooのインスタンスが無くても sizeof(((Foo*)0)->y) と書けばC言語で逝けるかもしれん… スゲー気持ち悪いコードだが、、、、
- 973 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:46:34.52 ID:PfQY9kAx.net]
- >>951
あくまでコンパイル時の型で決まるだけだから要注意 例えば class A; class B : public A; A* p = new B(); std::shared_ptr<A> a(p); これだとBのデストラクタは呼ばれない
- 974 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:48:17.68 ID:5sPbacoo.net]
- なんでそんな中途半端な機能を
わざわざコストをかけて入れたんだろう
- 975 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:49:32.31 ID:5sPbacoo.net]
- やむを得ず
なんだろうけど
- 976 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 21:51:55.29 ID:PfQY9kAx.net]
- >>953
Linuxカーネルとかそういう感じのマクロ満載だよ C言語はそういうもん
- 977 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 22:05:12.60 ID:TeOOTcIs.net]
- type erasureと相性悪いんだっけ
- 978 名前:はちみつ餃子 mailto:sage [2019/12/15(日) 22:15:04.90 ID:jthcUe0A.net]
- >>943
思い出した。 gcc や clang の拡張で良ければ複文が式になる。 だいぶん昔からある機能。 #include <vector> #include <iostream> int main() { std::vector<int> foo(({int i; for(i=0; i<3; i++); i;})); std::cout << foo.size() << std::endl; return 0
- 979 名前:;
} [] - [ここ壊れてます]
- 980 名前: mailto:sage [2019/12/16(月) 19:39:21.34 ID:NZyGx79l.net]
- >>944,945,948,959
コメントありがとうございます! >>944,959 まずgcc拡張 >SieveDerived(int n) : Sieve<T>(({int r; while((r = index(n)) == 0) n--; r;})) { } /* HERE!! */ で問題なく動作しました すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました 次にラムダ式で定義して即評価する方法がみつかりました >SieveDerived(int n) : Sieve<T>([](int n)->int{int r; while ((r = index(n)) == 0) n--; return r;}(n)) { } /* HERE!! */ これがやりたかった!とても満足しています、ありがとうございました! 今までは関数オブジェクトの糖衣構文としてしかみていなかったラムダ式を、自分の希望にあわせて(あるいはねじまげてでも)採用し、表現できるようになったのは一歩理解が深まったかと考えています >>948 >初期化リストの中にそんなごちゃごちゃしたこと書きたい? クラスのメソッド=メンバ関数には、クラスの提供する機能として独立性の高いもの、少なくとも二箇所で同じような処理がダブっているもの、あるいは主観的には「lemma」として成り立つものを書きたいと考えていました 一箇所でしか使わないものでも lemma 性があるのならば private メソッドとして書くのもありかと思っていますが、今回の場合は、他におなじような処理をおこなっている場所はなく、かといってメソッドとして立てるほどのことでもないので、 複数個所からコールできるメソッドにはしたくなかった、という主観がありました、そういう性質の記述ならば初期化リストにごちゃごちゃ書くのもありかと、読み手には他からコールされ得ないことが自明である点からしても https://ideone.com/y3ROXS
- 981 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 20:14:24.13 ID:89loOkbp.net]
- まあこういう自己満は通過儀礼だよな
- 982 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 21:46:21.90 ID:kSgVv2yp.net]
- lambdaの即時評価はjsだと多用されているイメージ
ブロックスコープないからね
- 983 名前:はちみつ餃子 mailto:sage [2019/12/17(火) 00:52:53.01 ID:0JRJucIS.net]
- >>960
> すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました 30 年以上の実績があってもなお仕様に入らない程度に駄目なんだよ。
- 984 名前:デフォルトの名無しさん [2019/12/17(火) 03:23:09 ID:JQ5aWxOy.net]
- プライベートメンバの単体テストってみんなどうしてるのかな。
- 985 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 03:30:02 ID:nsTCJN+n.net]
- #define private public
- 986 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 03:58:13.47 ID:KUtZUPl9.net]
- #if 0
friend test; #endif
- 987 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 07:08:07.08 ID:KzMqUd+t.net]
- #ifndef NDEBUG
friend struct test; #endif
- 988 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 07:46:15.26 ID:wpWnXFFo.net]
- 闇言語
- 989 名前:デフォルトの名無しさん [2019/12/17(火) 11:20:07.09 ID:dc1/89bE.net]
- namespace Method{ namespace Detail {
template<typename ReturnType, typename ... ArgTypes> struct MethodRegister{}; } } // 文字列で呼び出すための関数を登録するためのマクロ #define METHOD_REGISTER_WITH_NAME( NAME, FUNC, RETURNTYPE, ... ) \ namespace Method { namespace Detail { \ template<> struct MethodRegister<RETURNTYPE, __VA_ARGS__> { \ using Functional = std::function<RETURNTYPE(__VA_ARGS__)>; \ MethodRegister() { \ MethodContainer::GetInstance().Register<RETURNTYPE, __VA_ARGS__>( #FUNC, Functional( static_cast<RETURNTYPE(*)( __VA_ARGS__ )>( FUNC ) ) ); \ } \ ~MethodRegister() { \ MethodContainer::GetInstance().Unregister( #FUNC ); \ } \ }; \ static MethodRegister<RETURNTYPE, __VA_ARGS__> sMethodRegister##FUNC; \ } } void HOGE(){ std::cout << "Hello World!" << std::endl; } void HOGE( std::string text ){ std::cout << text << std::endl; } METHOD_REGISTER_METHOD( HOGE, void ); METHOD_REGISTER_METHOD( HOGE, void, std::string ); こういった形で関数を登録する用のクラスを生成し、変数として生成して管理の自動化を行いたいのですが、 関数のオーバーロードを対応しようとした所、クラスの再定義や変数の再定義、管理クラスへの重複登録等 多数の問題が出て詰まってしまいました。 こういった問題を対処するにはどうすればよいのでしょうか?
- 990 名前:デフォルトの名無しさん [2019/12/17(火) 11:28:10.65 ID:rApV4krM.net]
- BOOST
- 991 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 12:23:52.67 ID:lfJGbKnI.net]
- >>966
>>967 リリース時に消す必要あんの?
- 992 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 18:42:08.59 ID:iYSb7MEE.net]
- このへんがいいんでないの。
https://srz-zumix.blogspot.com/2015/06/c-private.html
- 993 名前: mailto:sage [2019/12/17(火) 19:10:07.01 ID:780pCLgH.net]
- >>963
まあ、 ({int r; while((r = index(n)) == 0) n--; r;}) の最後の r; というのが限りなく非文法的ですし
- 994 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:19:56.70 ID:r3fDxRx7.net]
- プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。
まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。
- 995 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:45:39.29 ID:HvtzVY9o.net]
- templateでアクセスすると合法的にプライベートメンバにアクセスできる
- 996 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:49:21.80 ID:iYSb7MEE.net]
- そんな糞な方法でテストなんかしたくねー。
- 997 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 01:14:03 ID:zSYbFuJ0.net]
- テストなんかお綺麗にする必要が無い
- 998 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 06:18:11.97 ID:BbfJ/y//.net]
- テストのテストが必要になるような意味のわからないテストコードはアウト
テストコードは実行せずに人が読んで理解できなければいけない
- 999 名前:デフォルトの名無しさん [2019/12/18(水) 07:25:56.60 ID:ksLRDXXy.net]
- >>978
どんな感じか見せていただけないでしょうか。
- 1000 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:42:51.80 ID:PEFQbiIG.net]
- >>971
絶対必要でもないが 少なくともデバッグ用であることくらい アピールしたい //よりNDEBUGという特定ワードを使う点にも拘りがある
- 1001 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 07:48:17.80 ID:uFDqtnkl.net]
- >>979
例えばテストコードの中にループや条件分岐があるようなものはアウト
- 1002 名前:デフォルトの名無しさん [2019/12/18(水) 11:33:15.65 ID:ksLRDXXy.net]
- ループは許してもらえませんか?
データの並びとか検査したいんで。 条件分岐はたぶんないと思います。
- 1003 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 12:41:59.93 ID:pXzQg2xI.net]
- 原理主義にすぐ染まるやつw
ご苦労様
- 1004 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:15:29.66 ID:iEIErwam.net]
- テスト用にいろんな複雑なテストも入れてるけど
まずいのか?
- 1005 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:22:47.07 ID:AjekT9H/.net]
- Debugビルドしたら遅すぎて検証できなくて詰んだ
- 1006 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:34:17.71 ID:YQOjezK4.net]
- 典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、
テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな 原則的には、期待する出力は全てハードコードするのが正しい 難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ
- 1007 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:39:53.25 ID:iEIErwam.net]
- メカが絡むリアルタイム処理でそんな事出来るかよ
- 1008 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:13:38.33 ID:uFDqtnkl.net]
- >>982
Parameterized Testsがあれば十分じゃね?
- 1009 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:16:04.78 ID:uFDqtnkl.net]
- >>986
期待する出力をハードコードするから テストで「○○以上であること」って書くこと無いよね? こういうテストケースある?言い換えるとそういうマッチャーって必要?
- 1010 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 15:38:06.38 ID:AmwvkO78.net]
- 次スレは
- 1011 名前:デフォルトの名無しさん [2019/12/18(水) 16:59:26.54 ID:ksLRDXXy.net]
- よ。
- 1012 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:57:22.30 ID:uFDqtnkl.net]
- ほらよ
C++相談室 part147 https://mevius.5ch.net/test/read.cgi/tech/1576659413/
- 1013 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 20:28:47.90 ID:CdPazUY7.net]
- >>987
それはまた別の話 ここで言ってるのは単体テストレベルの話だぞ
- 1014 名前:デフォルトの名無しさん [2019/12/18(水) 21:11:16.67 ID:LM1drZI+.net]
- クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?
- 1015 名前:蟻人間 mailto:sage [2019/12/18(水) 21:14:21.02 ID:Zo1XP656.net]
- >>995
strcpyなんて古い関数は21世紀では使えないぜ。std::stringでOK.
- 1016 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:14:35.04 ID:uFDqtnkl.net]
- C言語でしっかり文字列処理出来るようになったほうがいい? → いい
C++でC言語の文字列処理する? → しない
- 1017 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:16:04.08 ID:aoz4SWmd.net]
- >>987
逆にそういう不確定な部分とロジック部分を切り分けるのが単体テストの目的でもある。
- 1018 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 23:15:57.41 ID:cF9WM4jz.net]
- >>992乙
お前らコピー使うなムーブしろ
- 1019 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 00:00:58.14 ID:zX6m0cqE.net]
- 単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝
Google TestとかTest::MoreとかJUnit使ったらワカル
- 1020 名前:蟻人間 mailto:sage [2019/12/19(木) 00:08:57.93 ID:r6T/W91o.net]
- あれっ?
- 1021 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 41日 12時間 33分 22秒
- 1022 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|