+ void DisplayCalibResult(Lcd& lcd,\r
+ Speaker& speaker,\r
+ char* disp,\r
+ const unsigned long offset,\r
+ const int tone,\r
+ const unsigned long y);\r
+\r
+ template<class T>\r
+ struct traits{\r
+ unsigned long foo(T& x){\r
+ return 0;\r
+ }\r
+ };\r
+\r
+ //traitsクラス(デフォルトはアルゴリズムA)\r
+ template<>\r
+ struct traits<GyroSensor>{\r
+ static unsigned long foo(GyroSensor& x){\r
+ return x.get();\r
+ }\r
+ };\r
+ //traitsクラス(Hoge型はアルゴリズムB)\r
+ template<>\r
+ struct traits<LightSensor>{\r
+ static unsigned long foo(LightSensor& x){\r
+ return x.getBrightness();\r
+ }\r
+ };\r
+\r
+ //タグごとに処理を切り替えて実行\r
+ template<class T>\r
+ unsigned long GetOffset(T & x,Clock& clock){\r
+ const int sum_num = 256;\r
+ unsigned long sum = 0;\r
+ for(int i=0;i<sum_num;i++){\r
+ sum += traits<T>::foo(x);\r
+ clock.wait(10);\r
+ }\r
+ return sum / sum_num;\r
+ }\r