Search code examples
c++templatesabstract-class

Is possible to get type a child class type from base class?


I need something like this:

template <typename T>
class A
{
public:
    T commonData;
    TYPEOF_CHILD_CLASS *test(T data)
    {
        return new CHILD_CLASS(data);
    }
};

template <typename T>
class B : public A<T>
{
public:
    T bdata;
    B(T data)
    {
        bdata = data;
    }
};

template <typename T>
class C : public A<T>
{
public:
    T cdata;
    C(T data)
    {
        cdata = data;
    }
};

int main(int argc, char const *argv[])
{
    auto a = C<int>(1).test(2);
    return 0;
}

Is possible to define TYPEOF_CHILD_CLASS in c++? Before I used D. In D it works with:

R (this R) test(T data)
{
   return new R(data);
}
...

void main()
{
    auto a = new C!A(1).test(2);
}

It is a template. Does the c++ have a similar method? Maybe can I set type also via a template? Or may be I determine typename via typeid?


Solution

  • Thanks @Some programmer dude @463035818_is_not_a_number. In according to this link it works.

    template <class T, typename TT>
    class A
    {
    public:
        TT commonData;
        T *test(TT data)
        {
            return new T(data);
        }
    };
    
    template <typename T>
    class B : public A<B<T>, T>
    {
    public:
        T bdata;
        B(T data)
        {
            bdata = data;
        }
    };
    
    template <typename T>
    class C : public A<C<T>, T>
    {
    public:
        T cdata;
        C(T data)
        {
            cdata = data;
        }
    };
    
    int main(int argc, char const *argv[])
    {
        auto a = C<int>(1).test(2);
        return 0;
    }