工具/软件:TI C/C++编译器
我有两个具有专业化的模板组
模板<class T> class ModBusIB;
模板<class T> class ModBusIR;
模板<class T> class
ModBusOB;
模板<class T1, class T2 = void, class T3 = void, class T4 = void>
class ModBusFram;
template <class T>
class ModBusFram<ModBusIB<T> class ModBusIB<T>,void
,bits <void,invoid,invoid,InputT bits:
};
模板<t1类,t2类,t3类, T4>
类ModBusFram<ModBusIB<T1>,ModBusIR<T2>,ModBusOB<T3>,ModBusOR<T4>>
{
公共:
T1输入位;
T2输入位;
T3输出位;
T4输出位
;};
*********************** //*MODBUS
SRAM模板*//**************************************************************************************************************************************************
/
模板<t1类,t2类= void,t3类= void,t4类= void>
类ModBusSram;
模板<t1类,t2类,t3类,t4类>
类ModBusSram<ModBusIB<t1>,ModBusOB<T3>,ModBusOR<T4>>
{
公共:
T1输入位;
t2输入
位
;t4输出位;t3输出
模板<class t1, class t2>
class ModBusSram<ModBusIB<t1>,ModBusOB<t2>>{
public:
T1 InputBits;
T2 OutputBits;
};
当我声明这些类的对象时
enum EventsTimePrescale
{
EventStart,
EventEnd}
;
typedef结构
{
bool isActive;
} FO_Bits_events;
typedef结构
{
FLOAT CriticalValues[3];
} FO_Regs_events;
}未签名pedef { bool isEnable; bool isAlarmEnable; bool结构AckEnable;{ f_Timesf_Eventsf_Presstry;{bits
typedef结构
{
bool isAlarm;
} so_bits_events;
ModBusFram
<
ModBusIB<FI_Bits_Events>,
ModBusIR<FI_Regs_Events>,
ModBusOB<FO_Bits_Events>,
ModBusOR<FO_Regs_Events>
TestFram;
ModBusSram
<
ModBusIB<SI_Bits_Events>,
ModBusOB<SO_Bits_Events>
TestSram;
我可以在 放置句点时毫无问题地弹出班级成员列表,如下图所示
但是当我使用前两个参数声明第三个模板类时,我看不到此模板参数的弹出列表
模板<t1类,t2类= void>
类ModBusDirect;
模板<t1类,t2类,t3类,t4类, T5类,T6类,T7类,T8>
类ModBusDirect<ModBusSram<T1,T2,T3,T4>,ModBusFram<T5, T6,T7,T8>>
{
公共:
ModBusSram<T1,T2,T3,T4> * SRAM;
ModBusFram<T5, T6,T7,T8> * Fram;
ModBusFram<T5,T6, T7,T8> *默认值;
};
ModBusDirect < ModBusSram < ModBusIB<SI_Bits_Events>, ModBusOB<So_Bits_Events> , ModBusFram < ModBusIB<FI_Bits_Events>, ModBusIR<FI_Regs_Events>, ModBusOB<FO_Bits_Events>, ModBusOR<FO_Regs_Events> 直接;
当我将句点放在变量Direct之后时 ,我看不到此模板参数的弹出列表! 为什么?
但是,此模板类的所有成员都已成功编译,例如 direct.fram.OutputBits.isActive = true;


