Kiki Du
Kiki Du

Reputation: 77

How to reuse the code if only the base class is different in C++?

I have two classes, all the codes are the same, except for the base class. How could I refactor them and reuse the code? some_code_1 and some_code_2 are the same in two classes. I'm new to C++, thank you for giving me any suggestions.

<template class C>
class A : Base_1<C>
{
    private:
        using Base = Base_1<C>;
    public:
        using Base::Base;
       
        method(pa1, pa2, pa3)
        {
            // some_same_code_1
            Base::some_method(pa1, pa2, pa3);
            // some_same_code_2
        }
}

<template class C>
class A : Base_2<C>
{
    private:
        using Base = Base_2<C>;
    public:
        using Base::Base;
       
        method(pa1, pa2, pa3, pa4, pa5)
        {
            // some_same_code_1
            Base::some_method(pa1, pa2, pa3, pa4, pa5);
            // some_same_code_2
        }
}

Upvotes: 0

Views: 112

Answers (1)

HolyBlackCat
HolyBlackCat

Reputation: 96236

Use a template:

template <typename Base>
class Foo : Base
{
  public:
    // some_code_1
    Base::some_method(pa1, pa2, pa3);
    // some_code_2
};

using A = Foo<Base_1>;
using B = Foo<Base_2>;

Here, using A = Foo<Base_1>; makes A a shorthand for Foo<Base_1>. Alternatively you can write Foo<Base_1> every time you need your class. Same for B and Foo<Base_2>.

Upvotes: 2

Related Questions