С++ type_info как параметр шаблона (имя типа)

Есть ли способ использовать const std::type_info& в качестве параметра шаблона в С++?

Например

template < typename T > class A
{
public:
    A(){}
    const std::type_info& type() const
    {
        return typeid(T);
    }
};

template < typename T > void Do()
{
    // Do whatever
}

int main()
{
    A<int> MyA;
    // Something like: Do<MyA.type()>(); or Do<typeid(MyA.type())>();
}

person Joseph    schedule 29.01.2014    source источник
comment
Кратко: Нет, type_info - это (не конструируемый constexpr) объект. Почему бы вам просто не использовать аргумент шаблона (T)? Если вы намерены предоставить различные реализации для полиморфных классов во время выполнения, это может вас заинтересовать: different-data-types/21318361#21318361" title="как заставить один интерфейс возвращать разные типы данных"> stackoverflow.com/questions/21317403/   -  person Sebastian Hoffmann    schedule 29.01.2014


Ответы (1)


Вы не можете использовать информацию о типе времени выполнения в качестве параметра шаблона времени компиляции.

В C++11 decltype может дать вам статический тип выражения:

Do<decltype(MyA)>();

Исторически сложилось так, что лучшее, что вы могли бы сделать, это использовать другой шаблон функции для вывода типа из ее аргумента:

template <typename T> void Do(T const &) {Do<T>();}

Do(MyA);
person Mike Seymour    schedule 29.01.2014