Zwracanie różnych typów z szablonami

0

Witam.
W jaki sposób mogę poprawić ten kod, aby funkcja zwracała odpowiedni wektor? Obecnie kompilator nie pozwala na to, by ich typy się różniły.

struct Containers {
    std::vector<int> intContainer;
    std::vector<std::string> stringContainer;
    
    template<typename T, typename = std::enable_if< std::is_same<T, int>::value || std::is_same<T, std::string>::value> >
    std::vector<T>& get_container() {
        if(std::is_same<T, int>())
            return intContainer;
       else if(std::is_same<T, std::string>())
            return stringContainer;
    }
};
2

Użyj constexpr if:

struct Containers {
    std::vector<int> intContainer;
    std::vector<std::string> stringContainer;
 
    template<typename T, typename = std::enable_if< std::is_same<T, int>::value || std::is_same<T, std::string>::value> >
    std::vector<T>& get_container() {
        if constexpr(std::is_same<T, int>())
            return intContainer;
       else if(std::is_same<T, std::string>())
            return stringContainer;
    }
};

Przy czym enable if to rzadko dobra droga, lepiej tag dispatchować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1