请考虑以下两个(类似)符号:_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_
=第一个模板参数T0_
=第二个模板参数因此实际上有可用信息来打印更通用的模板声明。
例如,采用以下格式:
template<typename T_, typename T0_> void foo(T_, int, T0_);
或
template<typename T_, typename T0_> void foo(T0_, int, T_);
是否有一种简单的方法来检索此信息?
(而且,不,我不想实现一个可以解释完整IA64 C ++ ABI规范的解析器)