Рассмотрим следующие два (похожих) символа: _Z3fooIicEvT_iT0_
и _Z3fooIicEvT0_iT_
.
c++filt
дает следующий вывод:
> c++filt _Z3fooIicEvT_iT0_
void foo<int, char>(int, int, char)
> c++filt _Z3fooIicEvT0_iT_
void foo<int, char>(char, int, int)
Это не говорит нам, в какомЧтобы параметры шаблона использовались в качестве параметров функции.
Однако обратите внимание, что символы заканчиваются по-разному (T_iT0_
против T0_iT_
), где:
T_
=1-й параметр шаблона
T0_
= 2-й параметр шаблона
Таким образом, на самом деле имеется информация для печати более общего объявления шаблона.
ДляНапример, в следующем формате:
template<typename T_, typename T0_> void foo(T_, int, T0_);
или
template<typename T_, typename T0_> void foo(T0_, int, T_);
Есть ли простой способ получить эту информацию?
(И нет, яне хочу реализовывать парсер, который может интерпретировать полную спецификацию IA64 C ++ ABI)