I have errors in this code (g++ compiler), but in MSVS is compiling good. Please help to solve this problem.
code:
template<class t_Struct, typename T_Xerializer>
struct FindXerializer
{
template <int>
struct ImplementedXerializer;
template <>
struct ImplementedXerializer<1>
{
static void load_struct(CTicDbxJob& job, t_Struct& aResult)
{
T_Xerializer x(aResult);
try
{
CTICSerializer::Load(x, job.getTicOptions().internal_getFieldsStore());
aResult = x;
}
catch(IFieldsStore::baddata_exception&)
{
aResult = t_Struct();
}
}
}
}
template<class t_Struct, class T_Xerializer>
bool Xerializer<t_Struct, T_Xerializer>::load_struct(CTicDbxJob& job, t_Struct& aResult)
{
FindXerializer<t_Struct, T_Xerializer>::ImplementedXerializer<CanXerialize<T_Xerializer>::Yes >::load_struct(job, aResult);
return true;
}
template<class t_Struct, class T_Xerializer>
bool Xerializer<t_Struct, T_Xerializer>::save_struct(CTicDbxJob& job, const t_Struct& aData)
{
FindXerializer<t_Struct, T_Xerializer>::ImplementedXerializer<CanXerialize<T_Xerializer>::Yes >::save_struct(job, aData);
return true;
}
errors:
error: explicit specialization in non-namespace scope 'struct TicDbx::FindXerializer'
error: template parameters not used in partial specialization: struct ImplementedXerializer<1>
I DONE IT!!!! here the solution:
template <class t_Struct, class T_Xerializer, int>
struct ImplementedXerializer
{
};
template <class t_Struct, class T_Xerializer>
struct ImplementedXerializer<t_Struct, T_Xerializer, 1>
{
static void load_struct(CTicDbxJob& job, t_Struct& aResult)
{
T_Xerializer x(aResult);
.....
}
static void save_struct(CTicDbxJob& job, const t_Struct& aData)
{
.....
}
};
template <class t_Struct, class T_Xerializer>
struct ImplementedXerializer<t_Struct, T_Xerializer, 0>
{
static t_Struct& get_static()
{
.....
}
static void load_struct(CTicDbxJob& job, t_Struct& aResult)
{
....
}
static void save_struct(CTicDbxJob& job, const t_Struct& aData)
{
.....
}
};
^
template<class t_Struct, class T_Xerializer>
bool Xerializer<t_Struct, T_Xerializer>::load_struct(CTicDbxJob& job, t_Struct& aResult)
{
.....
}
template<class t_Struct, class T_Xerializer>
bool Xerializer<t_Struct, T_Xerializer>::save_struct(CTicDbxJob& job, const t_Struct& aData)
{
.....
}