help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-gsl] Re: Reg :: Error in declaring typedef of template class


From: Akanksh Vashisth
Subject: Re: [Help-gsl] Re: Reg :: Error in declaring typedef of template class
Date: Wed, 11 Nov 2009 09:23:04 +0000

Hello Sumit,

I would advice against using this form:

template<class T> class m_signal_out_if<T> : public m_signal_inout_if<T> {};

to do a pseudo-typedef, because here the assumption is that m_signal_inout_if
has a virtual destructor, because if m_signal_inout_if does not have a
virtual destructor, than the destruction of the base class shall not be
correct and might result in memory leaks if any of the base classes free up
allocated memory while destructing.

So this technique works fine if the base class is known to not do any
allocations (and you are happy with undefined destruction behaviour) or if
it is known that the base class has a virtual destructor. Even so, the
overhead of the compiler generating the constructor and destructor of this
derived class is not acceptable or needed.

And yes, C++0x will have support for templated typedefs.

2009/11/11 Sumit Adhikari <address@hidden>

> Hello Akanksh,
> I already had a solution through which I could have wrote(in fact I used if
> you see mt other template classes) it as follows :
>    template<class T> class m_signal_out_if<T> : public m_signal_inout_if<T>
> {};
> But I was curious about this specific implementation of templated typedef.
> Well it is not supported. I do  know it is supported in c++0x.
> Thanks for the reply,
> Regards,
> Sumit
>
>
>
> On Wed, Nov 11, 2009 at 2:37 PM, Akanksh Vashisth <address@hidden>wrote:
>
>> Also, if a collection of such typedefs is needed, something like this can
>> be done ( but I would not suggest it as a default solution )
>>
>> template<typename T>
>> struct MyType
>> {
>>      typedef  m_signal_inout_if < T >  m_signal_out_if;
>>      typedef something_else_01<T> something_01;
>>      typedef something_else_02<T> something_02;
>> }
>>
>> and these can now be used as:
>>
>> MyType<SomeType1>:: m_signal_out_if variable_name_01;
>> MyType<SomeType2>:: something_01   variable_name_02;
>> MyType<SomeType3>:: something_02   variable_name_03;
>>
>> Hope this helps.
>>
>> Akanksh Vashisth
>> Graphics Engine Programmer
>> ArtVPS Ltd.
>> Cambridge, UK
>>
>> 2009/11/11 Akanksh Vashisth <address@hidden>
>>
>> Hello Sumit,
>>>
>>> In C++ typedef of a template is illegal, so the following code
>>>
>>>
>>> template < class T >
>>> typedef  m_signal_inout_if < T >  m_signal_out_if < T > ;
>>>
>>> will not compile.
>>>
>>> If you do want to typedef something like this, you need to surround it
>>> with a class definition, such as:
>>>
>>> template<typename T>
>>> struct m_signal_out_if
>>> {
>>>     typedef m_signal_inout_if  < T > type;
>>> }
>>>
>>> This can now be used as a type in the following way:
>>>
>>> m_signal_out_if<SomeType>::type variable_name;
>>>
>>> But seeing that the difference in you typedef name and the original class
>>> name is not a lot, the overhead and complexity of this typedef is (in my
>>> opinion) not acceptable.
>>>
>>> Hope this helps.
>>>
>>> Akanksh Vashisth
>>> Graphics Engine Programmer
>>> ArtVPS Ltd.
>>> Cambridge, UK
>>>
>>> 2009/11/11 Sumit Adhikari <address@hidden>
>>>
>>> A little correction :
>>>>
>>>> # ifndef M_SIGNAL_OUT_IF_H_
>>>> # define M_SIGNAL_OUT_IF_H_
>>>>
>>>>
>>>> # include "m_signal_inout_if.h"
>>>>
>>>> template < class T > typedef  m_signal_inout_if < T >  m_signal_out_if <
>>>> T > ;
>>>>
>>>>
>>>>
>>>> # endif /*M_SIGNAL_OUT_IF_H_*/
>>>>
>>>>
>>>>
>>>> --------------------------------------------
>>>> Sumit Adhikari
>>>> System Design Engineer
>>>> austriamicrosystems AG
>>>> Business Unit : Automotive
>>>> Mob : 00-91-9885271710/00-91-9000161710
>>>>
>>>>
>>>>
>>>> On 11/11/2009 8:49 AM, Sumit Adhikari wrote:
>>>>
>>>>> Hello All,
>>>>>
>>>>> I have a template class like as follows :
>>>>>
>>>>> # ifndef M_SIGNAL_INOUT_IF_H_
>>>>> # define M_SIGNAL_INOUT_IF_H_
>>>>>
>>>>> # include "m_signal_in_if.h"
>>>>>
>>>>> template < class T > class m_signal_inout_if : public m_signal_in_if <
>>>>> T > {
>>>>>   public :
>>>>>      virtual void write (const T&) = 0 ;
>>>>>      virtual void initialize(const T&) = 0;
>>>>> };
>>>>>
>>>>>
>>>>> # endif /*M_SIGNAL_INOUT_IF_H_*/
>>>>>
>>>>> I want to declare typedef of m_signal_inout_if and I have done it as
>>>>> follows :
>>>>>
>>>>> # ifndef M_SIGNAL_OUT_IF_H_
>>>>> # define M_SIGNAL_OUT_IF_H_
>>>>>
>>>>>
>>>>> # include "m_signal_inout_if.h"
>>>>>
>>>>> template < class T > m_signal_inout_if < T >  m_signal_out_if < T > ;
>>>>>
>>>>>
>>>>> # endif /*M_SIGNAL_OUT_IF_H_*/
>>>>>
>>>>>
>>>>> But I am getting syntax error in this process.
>>>>> Can anybody please tell me what is the wrong with it ?
>>>>> Regards,
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Help-gsl mailing list
>>>> address@hidden
>>>> http://lists.gnu.org/mailman/listinfo/help-gsl
>>>>
>>>
>>>
>>
>
>
> --
>
> --------------------------------------------
> Sumit Adhikari
> System Design Engineer
> austriamicrosystems AG
> Business Unit : Automotive
> Mob : 00-91-9885271710/00-91-9000161710
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]