Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!dmd -run
- import std.stdio;
- abstract class Sensor(T) {
- abstract T value();
- @property string name(){
- return m_name;
- }
- protected:
- string m_name;
- }
- class TempSensor : Sensor!float {
- this(){
- m_name = "TempSensor";
- }
- override float value(){
- //extract some data from hardware
- writeln("Getting value of TempSensor");
- return 0.0;
- }
- }
- class SomethingSensor : Sensor!int {
- this(){
- m_name = "SomethingSensor";
- }
- override int value(){
- //extract some data from hardware
- writeln("Getting value of SomethingSensor");
- return 0;
- }
- }
- void main() {
- //How to store all sensors in a single array and execute specific functions?
- //First try:
- Object[2] sensors;
- sensors[0] = cast(Object)(new TempSensor());
- sensors[1] = cast(Object)(new SomethingSensor());
- //But now, How can i call value() without knowing its final type?
- //I can't cast to Sensor!T to call value()
- //Second try:
- Sensor!(void[])[2] sensors2;
- sensors2[0] = cast(Sensor!(void[]))(new TempSensor());
- sensors2[1] = cast(Sensor!(void[]))(new SomethingSensor());
- //seems better but:
- sensors2[0].value();//Getting a seg fault
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement