Loading TemplateTest/main.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -262,7 +262,6 @@ struct tempData { }; Traits<tempData, double>::makeReferences("density"s, &tempData::density); void testMemberRef(){ Loading @@ -285,6 +284,10 @@ void testMemberRef(){ app2->setValue(&d, {42.15,84.30,42.15}); DBGVAR(app2->getValue(&d), d.velocity); Traits<tempData, double, Vector<3,double>> r; Traits<tempData, double, Vector<3,double>>::getReference<0>() = &ref; //new MemberReference<tempData, double>::SuperRef<double tempData::*>(&tempData::density); Traits<tempData, double, Vector<3,double>>::getReference<1>() = new MemberReference<tempData, Vector<3, double>>::SuperRef(std::make_pair(&tempData::getMomentum, &tempData::setMomentum)); DBGVAR(r.refs.MemRefs<0>::ref->getValue(&d), (Traits<tempData, double, Vector<3,double>>::getReference<1>()->getValue(&d))); } void testOrig() { Loading Unstructured_mesh/UnstructuredMesh/MeshDataContainer/Traits.h +14 −6 Original line number Diff line number Diff line Loading @@ -16,26 +16,31 @@ class Traits { using type = std::tuple_element_t<Index,std::tuple<Types...>>; template<unsigned int Index = sizeof...(Types) - 1, typename Dummy = void> class MemRefs{ MemberApproach<Class, type<Index>>* ref; struct MemRefs: public MemRefs<Index - 1>{ MemberApproach<Class, type<Index>>* ref = nullptr; std::string name; }; template<typename Dummy> class MemRefs<0, Dummy>{ MemberApproach<Class, type<0>>* ref; struct MemRefs<0, Dummy>{ MemberApproach<Class, type<0>>* ref = nullptr; std::string name; }; public: static MemRefs<sizeof... (Types) - 1> refs; static MemRefs<sizeof... (Types) - 1, void> refs; template<unsigned int Index> static MemberApproach<Class, type<Index>>*& getReference(){ return refs.MemRefs<Index, void>::ref; } template<typename...Refs> static void makeReferences(Refs... refsAndNames) { _makeReferences<0>(refsAndNames...); } template<unsigned int Pos = 0, typename ref, typename...Refs> static void _makeReferences(std::string name, ref member,Refs... refsAndNames) { _makeReferences<Pos, ref>(name, member); Loading @@ -53,4 +58,7 @@ public: }; template<typename Class, typename... Types> typename Traits<Class, Types...>::template MemRefs<sizeof... (Types) - 1> Traits<Class,Types...>::refs; #endif // TRAITS_H Unstructured_mesh/Unstructured_mesh.pro.user +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 4.10.0, 2019-10-30T13:31:16. --> <!-- Written by QtCreator 4.10.0, 2019-10-30T16:43:37. --> <qtcreator> <data> <variable>EnvironmentId</variable> Loading Loading
TemplateTest/main.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -262,7 +262,6 @@ struct tempData { }; Traits<tempData, double>::makeReferences("density"s, &tempData::density); void testMemberRef(){ Loading @@ -285,6 +284,10 @@ void testMemberRef(){ app2->setValue(&d, {42.15,84.30,42.15}); DBGVAR(app2->getValue(&d), d.velocity); Traits<tempData, double, Vector<3,double>> r; Traits<tempData, double, Vector<3,double>>::getReference<0>() = &ref; //new MemberReference<tempData, double>::SuperRef<double tempData::*>(&tempData::density); Traits<tempData, double, Vector<3,double>>::getReference<1>() = new MemberReference<tempData, Vector<3, double>>::SuperRef(std::make_pair(&tempData::getMomentum, &tempData::setMomentum)); DBGVAR(r.refs.MemRefs<0>::ref->getValue(&d), (Traits<tempData, double, Vector<3,double>>::getReference<1>()->getValue(&d))); } void testOrig() { Loading
Unstructured_mesh/UnstructuredMesh/MeshDataContainer/Traits.h +14 −6 Original line number Diff line number Diff line Loading @@ -16,26 +16,31 @@ class Traits { using type = std::tuple_element_t<Index,std::tuple<Types...>>; template<unsigned int Index = sizeof...(Types) - 1, typename Dummy = void> class MemRefs{ MemberApproach<Class, type<Index>>* ref; struct MemRefs: public MemRefs<Index - 1>{ MemberApproach<Class, type<Index>>* ref = nullptr; std::string name; }; template<typename Dummy> class MemRefs<0, Dummy>{ MemberApproach<Class, type<0>>* ref; struct MemRefs<0, Dummy>{ MemberApproach<Class, type<0>>* ref = nullptr; std::string name; }; public: static MemRefs<sizeof... (Types) - 1> refs; static MemRefs<sizeof... (Types) - 1, void> refs; template<unsigned int Index> static MemberApproach<Class, type<Index>>*& getReference(){ return refs.MemRefs<Index, void>::ref; } template<typename...Refs> static void makeReferences(Refs... refsAndNames) { _makeReferences<0>(refsAndNames...); } template<unsigned int Pos = 0, typename ref, typename...Refs> static void _makeReferences(std::string name, ref member,Refs... refsAndNames) { _makeReferences<Pos, ref>(name, member); Loading @@ -53,4 +58,7 @@ public: }; template<typename Class, typename... Types> typename Traits<Class, Types...>::template MemRefs<sizeof... (Types) - 1> Traits<Class,Types...>::refs; #endif // TRAITS_H
Unstructured_mesh/Unstructured_mesh.pro.user +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 4.10.0, 2019-10-30T13:31:16. --> <!-- Written by QtCreator 4.10.0, 2019-10-30T16:43:37. --> <qtcreator> <data> <variable>EnvironmentId</variable> Loading