vendredi 1 septembre 2023

Can I initialize a template with variable type?

(Using C++17)

I have a situation where I need to iterate through a list of subclasses:

class S {}
class A : S {}
class B : S {}
class C : S {}

for (int i = 0; i < 3; i++) {
    shared_ptr<S> p;

    if (i == 0) {
        p = make_shared<A>();
    }
    else if (i == 1) {
        p = make_shared<B>();
    }
    else if (i == 2) {
        p = make_shared<C>();
    }

    // Do something with 'p'
}

This is quite ugly. I would much rather do something like this:

class S {}
class A : S {}
class B : S {}
class C : S {}

for (S subclass_type : {A, B, C}) {
    shared_ptr<S> p = make_shared<subclass_type>();

    // Do something with 'p'
}

Is this possible in C++? Can you initialize a template class from a variable type? (Not just shared_ptr.)

Aucun commentaire:

Enregistrer un commentaire