C++相談室 part146at TECH
C++相談室 part146 - 暇つぶし2ch989:デフォルトの名無しさん
19/12/17 11:20:07.09 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:デフォルトの名無しさん
19/12/17 11:28:10.65 rApV4krM.net
BOOST

991:デフォルトの名無しさん
19/12/17 12:23:52.67 lfJGbKnI.net
>>966
>>967
リリース時に消す必要あんの?

992:デフォルトの名無しさん
19/12/17 18:42:08.59 iYSb7MEE.net
このへんがいいんでないの。
URLリンク(srz-zumix.blogspot.com)

993:
19/12/17 19:10:07.01 780pCLgH.net
>>963
まあ、
({int r; while((r = index(n)) == 0) n--; r;})
の最後の
r;
というのが限りなく非文法的ですし

994:デフォルトの名無しさん
19/12/17 21:19:56.70 r3fDxRx7.net
プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。
まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。

995:デフォルトの名無しさん
19/12/17 21:45:39.29 HvtzVY9o.net
templateでアクセスすると合法的にプライベートメンバにアクセスできる

996:デフォルトの名無しさん
19/12/17 21:49:21.80 iYSb7MEE.net
そんな糞な方法でテストなんかしたくねー。

997:デフォルトの名無しさん
19/12/18 01:14:03 zSYbFuJ0.net
テストなんかお綺麗にする必要が無い

998:デフォルトの名無しさん
19/12/18 06:18:11.97 BbfJ/y//.net
テストのテストが必要になるような意味のわからないテストコードはアウト
テストコードは実行せずに人が読んで理解できなければいけない

999:デフォルトの名無しさん
19/12/18 07:25:56.60 ksLRDXXy.net
>>978
どんな感じか見せていただけないでしょうか。

1000:デフォルトの名無しさん
19/12/18 07:42:51.80 PEFQbiIG.net
>>971
絶対必要でもないが
少なくともデバッグ用であることくらい
アピールしたい
//よりNDEBUGという特定ワードを使う点にも拘りがある

1001:デフォルトの名無しさん
19/12/18 07:48:17.80 uFDqtnkl.net
>>979
例えばテストコードの中にループや条件分岐があるようなものはアウト

1002:デフォルトの名無しさん
19/12/18 11:33:15.65 ksLRDXXy.net
ループは許してもらえませんか?
データの並びとか検査したいんで。
条件分岐はたぶんないと思います。

1003:デフォルトの名無しさん
19/12/18 12:41:59.93 pXzQg2xI.net
原理主義にすぐ染まるやつw
ご苦労様

1004:デフォルトの名無しさん
19/12/18 13:15:29.66 iEIErwam.net
テスト用にいろんな複雑なテストも入れてるけど
まずいのか?

1005:デフォルトの名無しさん
19/12/18 13:22:47.07 AjekT9H/.net
Debugビルドしたら遅すぎて検証できなくて詰んだ

1006:デフォルトの名無しさん
19/12/18 13:34:17.71 YQOjezK4.net
典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、
テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな
原則的には、期待する出力は全てハードコードするのが正しい
難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ

1007:デフォルトの名無しさん
19/12/18 13:39:53.25 iEIErwam.net
メカが絡むリアルタイム処理でそんな事出来るかよ

1008:デフォルトの名無しさん
19/12/18 15:13:38.33 uFDqtnkl.net
>>982
Parameterized Testsがあれば十分じゃね?

1009:デフォルトの名無しさん
19/12/18 15:16:04.78 uFDqtnkl.net
>>986
期待する出力をハードコードするから
テストで「○○以上であること」って書くこと無いよね?
こういうテストケースある?言い換えるとそういうマッチャーって必要?

1010:デフォルトの名無しさん
19/12/18 15:38:06.38 AmwvkO78.net
次スレは

1011:デフォルトの名無しさん
19/12/18 16:59:26.54 ksLRDXXy.net
よ。

1012:デフォルトの名無しさん
19/12/18 17:57:22.30 uFDqtnkl.net
ほらよ
C++相談室 part147
スレリンク(tech板)

1013:デフォルトの名無しさん
19/12/18 20:28:47.90 CdPazUY7.net
>>987
それはまた別の話
ここで言ってるのは単体テストレベルの話だぞ

1014:デフォルトの名無しさん
19/12/18 21:11:16.67 LM1drZI+.net
クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?

1015:蟻人間
19/12/18 21:14:21.02 Zo1XP656.net
>>995
strcpyなんて古い関数は21世紀では使えないぜ。std::stringでOK.

1016:デフォルトの名無しさん
19/12/18 21:14:35.04 uFDqtnkl.net
C言語でしっかり文字列処理出来るようになったほうがいい? → いい
C++でC言語の文字列処理する? → しない

1017:デフォルトの名無しさん
19/12/18 21:16:04.08 aoz4SWmd.net
>>987
逆にそういう不確定な部分とロジック部分を切り分けるのが単体テストの目的でもある。

1018:デフォルトの名無しさん
19/12/18 23:15:57.41 cF9WM4jz.net
>>992
お前らコピー使うなムーブしろ

1019:デフォルトの名無しさん
19/12/19 00:00:58.14 zX6m0cqE.net
単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝
Google TestとかTest::MoreとかJUnit使ったらワカル

1020:蟻人間
19/12/19 00:08:57.93 r6T/W91o.net
あれっ?

1021:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 41日 12時間 33分 22秒

1022:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch