Guest User

Untitled

a guest
Nov 25th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. class AlarmData_b01
  2. {
  3. bool isAlarm;
  4. bool isCountActivate;
  5. };
  6.  
  7. class MeintenanceData_b01
  8. {
  9. bool isMeintenance;
  10. bool isCountActivate;
  11. };
  12.  
  13. class MeintenanceData_f32
  14. {
  15. unsigned short Id;
  16. unsigned long Time;
  17. float Rate;
  18. };
  19.  
  20. AlarmData_b01 *AlarmData_b01_Alarm1_ptr = InputBits<AlarmData_b01>::Add();
  21. AlarmData_b01 *AlarmData_b01_Alarm2_ptr = InputBits<AlarmData_b01>::Add();
  22.  
  23. MeintenanceData_b01 *AlarmData_b01_Meintenance1_ptr = InputBits<MeintenanceData_b01>::Add();
  24. MeintenanceData_b01 *AlarmData_b01_Meintenance2_ptr = InputBits<MeintenanceData_b01>::Add();
  25.  
  26. MeintenanceData_f32 *AlarmData_f32_Meintenance1_ptr = InputRegs<MeintenanceData_f32>::Add();
  27. MeintenanceData_f32 *AlarmData_f32_Meintenance2_ptr = InputRegs<MeintenanceData_f32>::Add();
  28.  
  29. InputBits<AlarmData_b01>::AddresSet(100);
  30. InputBits<MeintenanceData_b01>::AddresSet(110);
  31.  
  32. InputRegs<MeintenanceData_f32>::AddresSet(100);
  33.  
  34. template <typename T_DataType>
  35. class ModBusTables
  36. {
  37. protected:
  38.  
  39. static unsigned short Addres;
  40. static unsigned short AreaSize;
  41. T_DataType *AreaData_ptr;
  42.  
  43. ModBusTables();
  44.  
  45. public:
  46.  
  47. static void AddresSet(unsigned short ModBusAddres);
  48. };
  49.  
  50. static unsigned short Addres - Адрес области в таблице протокола Модбас
  51. static unsigned short AreaSize - Размер объектов в области
  52. T_DataType *AreaData_ptr - Тип для приведения указателя.
  53.  
  54. template <class T_DataStruct, class Specialization> class ModBusTable;
  55.  
  56. template <class T_DataStruct, typename T_DataType, template<typename> class TT_Table>
  57. class ModBusTable<T_DataStruct, TT_Table<T_DataType> > : public TT_Table<T_DataType>
  58. {
  59. private:
  60.  
  61. T_DataStruct AreaData;
  62.  
  63. public:
  64.  
  65. static T_DataStruct *Add()
  66. {
  67. ModBusTable *ModBusArea_ptr = new ModBusTable();
  68.  
  69. T_DataStruct *Instance_Ptr = &ModBusArea_ptr->AreaData;
  70.  
  71. ModBusTable<T_DataStruct, TT_Table<T_DataType> >::AreaSize = sizeof(ModBusArea_ptr->AreaData);
  72. ModBusArea_ptr->AreaData_ptr = (T_DataType *)Instance_Ptr;
  73.  
  74. return Instance_Ptr;
  75. }
  76. };
  77.  
  78. template <class T> class InputBits: public ModBusTable<T, ModBusTables<bool> > {};
  79. template <class T> class InputRegs: public ModBusTable<T, ModBusTables<unsigned short> > {};
  80. template <class T> class OutputBits: public ModBusTable<T, ModBusTables<bool> > {};
  81. template <class T> class OutputRegs: public ModBusTable<T, ModBusTables<unsigned short> > {};
  82.  
  83. InputBits<AlarmData_b01> и InputBits<MeintenanceData_b01>?
  84.  
  85. InputBits<AlarmData>::Add()
  86.  
  87. template<class A, class B>
  88. struct Base{};
  89.  
  90. template<class A>
  91. using WrapperFirst = Base<A, int>;
  92.  
  93. template<class A>
  94. using WrapperSecond = Base<A, double>;
  95.  
  96. int main() {
  97. WrapperFirst<int> a;
  98. WrapperSecond<int> b;
  99.  
  100. return 0;
  101. }
  102.  
  103. template<class A, class B>
  104. struct Base{};
  105.  
  106. template<class A>
  107. struct Wrapper
  108. {
  109. typedef Base<A, int> first;
  110. typedef Base<A, double> second;
  111. };
  112.  
  113. int main() {
  114. Wrapper<int>::first a;
  115. Wrapper<int>::second b;
  116.  
  117. return 0;
  118. }
Add Comment
Please, Sign In to add comment