Я хотел бы знать, что лучше использовать в моей ситуации и почему. Прежде всего я слышал, что использование RTTI (typeid) плохо. Кто-нибудь может объяснить, почему? Если я точно знаю типы, что неправильно сравнивать их во время выполнения? Кроме того, есть ли пример, как использовать boost :: type_of? Я не нашел ни одного поиска в могущественном Google :) Другое решение для меня - это специализация, но я бы не хотел специализировать как минимум 9 типов новых методов. Вот пример того, что мне нужно:
У меня есть этот класс
template<typename A, typename B, typename C>
class CFoo
{
void foo()
{
// Some chunk of code depends on old A type
}
}
Так что мне нужно скорее проверить typeid (то, что я слышал, ПЛОХО) и сделать эти 3 реализации в примере, например:
void foo()
{
if (typeid(A) == typeid(CSomeClass)
// Do this chunk of code related to A type
else
if (typeid(B) == typeid(CSomeClass)
// Do this chunk of code related to B type
else
if (typeid(C) == typeid(CSomeClass)
// Do this chunk of code related to C type
}
Так что же является лучшим решением? Я не хочу специализироваться для всех A, B, C, потому что у каждого типа есть 3 специализации, поэтому я получу 9 методов или только эту проверку typeid.