Commit b1e44885 authored by Tomáš Jakubec's avatar Tomáš Jakubec
Browse files

References work, now refactor and continue.

parent 070abea9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -262,7 +262,6 @@ struct tempData {

};

Traits<tempData, double>::makeReferences("density"s, &tempData::density);

void testMemberRef(){

@@ -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() {
+14 −6
Original line number Diff line number Diff line
@@ -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);
@@ -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
+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>