質問ですが構造体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)と書く
ふとオモタがインスタンスの必要性は無くせるかもしれん
Foo::Bar型のメンバFoo::yが定義さえされておれば、Fooのインスタンスが無くても
sizeof(((Foo*)0)->y)
と書けばC言語で逝けるかもしれん…
スゲー気持ち悪いコードだが、、、、
なんでそんな中途半端な機能を
わざわざコストをかけて入れたんだろう
lambdaの即時評価はjsだと多用されているイメージ
ブロックスコープないからね
0964デフォルトの名無しさん2019/12/17(火) 03:23:09.50ID:JQ5aWxOy
プライベートメンバの単体テストってみんなどうしてるのかな。
#if 0
friend test;
#endif
#ifndef NDEBUG
friend struct test;
#endif
0969デフォルトの名無しさん2019/12/17(火) 11:20:07.09ID:dc1/89bE
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 );
こういった形で関数を登録する用のクラスを生成し、変数として生成して管理の自動化を行いたいのですが、
関数のオーバーロードを対応しようとした所、クラスの再定義や変数の再定義、管理クラスへの重複登録等
多数の問題が出て詰まってしまいました。
こういった問題を対処するにはどうすればよいのでしょうか?
0970デフォルトの名無しさん2019/12/17(火) 11:28:10.65ID:rApV4krM
BOOST
プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。
まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。
templateでアクセスすると合法的にプライベートメンバにアクセスできる
テストのテストが必要になるような意味のわからないテストコードはアウト
テストコードは実行せずに人が読んで理解できなければいけない
0979デフォルトの名無しさん2019/12/18(水) 07:25:56.60ID:ksLRDXXy
>>978
どんな感じか見せていただけないでしょうか。 0982デフォルトの名無しさん2019/12/18(水) 11:33:15.65ID:ksLRDXXy
ループは許してもらえませんか?
データの並びとか検査したいんで。
条件分岐はたぶんないと思います。
テスト用にいろんな複雑なテストも入れてるけど
まずいのか?
Debugビルドしたら遅すぎて検証できなくて詰んだ
典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、
テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな
原則的には、期待する出力は全てハードコードするのが正しい
難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ
0991デフォルトの名無しさん2019/12/18(水) 16:59:26.54ID:ksLRDXXy
よ。
0994デフォルトの名無しさん2019/12/18(水) 21:11:16.67ID:LM1drZI+
クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?
C言語でしっかり文字列処理出来るようになったほうがいい? → いい
C++でC言語の文字列処理する? → しない
単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝
Google TestとかTest::MoreとかJUnit使ったらワカル
10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 41日 12時間 33分 22秒