Jak sprawdzić poprzez std::is_same czy typ to std::string

0

cześć
próbuję od wczoraj, ale bez rezultatu
mam metodę - variadic template - i chcę argument będący intem kierować w jedną strone, a stringiem w drugą

template<typename T>
class processor
{
public:
template<typename ...Type>
	std::thread parse_data(const Type& ...t)
     {
        if(std::is_same<T, Type>::value) //działa dla INT-ów, nie działa dla STRING-ów
       {
       }
     }
}

próbowałem bezszablonowo

if(std::is_same<std::string, const char *>::value) 

ale też nie działa

z góry dziękuję za odpowiedź

0

Rozwiń "nie działa".

Na pewno źle porównujesz: Type jest variadic packiem, a nie pojedynczym typem. Nie możesz go użyć nie rozwijając gdzieś ...

Btw, tutaj raczej będziesz chciał zastosować tag dispatch/if constexpr zamiast zwykłego ifa.

0
kq napisał(a):

Rozwiń "nie działa".

Na pewno źle porównujesz: Type jest variadic packiem, a nie pojedynczym typem. Nie możesz go użyć nie rozwijając gdzieś ...

Btw, tutaj raczej będziesz chciał zastosować tag dispatch/if constexpr zamiast zwykłego ifa.


//i tu jaqk były INT dla klasy to jak był typ int jako argument to na wyściu było 1 
//przy stringach zawsze było 0

(void)std::initializer_list<int>{(std::cout<<" "<<std::is_same<Type, TMain>::value,  0)...};

0
kq napisał(a):

U mnie działa. https://wandbox.org/permlink/mk12ht9iKmA3i46Q

hmmmm
może to kwestia kompilatora - ja używam VS 2017

int main()
{
    processor<int> p;
    p.parse_data("11", 123, "", 123, 123);//tak to wywołuję
}

0

rozwiązanie, które działa

(void)std::initializer_list<int>{(std::cout<<" "<< (std::is_same<Type, T>::value || std::is_convertible<Type, T>::value), 0)...};

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