Advertisement
Guest User

Untitled

a guest
Feb 27th, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.16 KB | None | 0 0
  1. #!dmd -run
  2.  
  3. import std.stdio;
  4.  
  5. abstract class Sensor(T) {
  6.     abstract T value();
  7.  
  8.     @property string name(){
  9.         return m_name;
  10.     }
  11.  
  12. protected:
  13.     string m_name;
  14. }
  15.  
  16. class TempSensor : Sensor!float {
  17.     this(){
  18.         m_name = "TempSensor";
  19.     }
  20.  
  21.     override float value(){
  22.         //extract some data from hardware
  23.         writeln("Getting value of TempSensor");
  24.         return 0.0;
  25.     }
  26. }
  27.  
  28. class SomethingSensor : Sensor!int {
  29.     this(){
  30.         m_name = "SomethingSensor";
  31.     }
  32.  
  33.     override int value(){
  34.         //extract some data from hardware
  35.         writeln("Getting value of SomethingSensor");
  36.         return 0;
  37.     }
  38. }
  39.  
  40.  
  41. void main() {
  42.     //How to store all sensors in a single array and execute specific functions?
  43.  
  44.     //First try:
  45.     Object[2] sensors;
  46.     sensors[0] = cast(Object)(new TempSensor());
  47.     sensors[1] = cast(Object)(new SomethingSensor());
  48.  
  49.     //But now, How can i call value() without knowing its final type?
  50.     //I can't cast to Sensor!T to call value()
  51.  
  52.  
  53.     //Second try:
  54.     Sensor!(void[])[2] sensors2;
  55.     sensors2[0] = cast(Sensor!(void[]))(new TempSensor());
  56.     sensors2[1] = cast(Sensor!(void[]))(new SomethingSensor());
  57.    
  58.     //seems better but:
  59.     sensors2[0].value();//Getting a seg fault
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement