Вопрос

Мне нужно использовать адрес элемента класса шаблона в встроенной сборке G ++ (как постоянное значение времени компиляции). Можно ли это выразить? (Я думаю, что мне нужно озвученное имя T<U>::x).

template < typename U >
struct T {
  static int x;
};

template < typename U >
void f () {
  asm ("somecommand T<U>::x");
}
Это было полезно?

Решение

Предполагая, что вы используете Linux, вы можете использовать NM.

NM --Demangle Foo.o дает вам деграфовые имена для ваших символов NM --no-demangle Foo.o дает вам потрясенные имена для ваших символов.

Затем вы можете сравнить выходные данные этих 2 файлов, чтобы сопоставить имя MANGLED к Dunnangled Name.

Другие советы

Я бы использовал objdump Чтобы извлечь потрясенное имя из объекта, который ссылается на него (вы можете использовать c++filt идти в другое направление, но я знаю, что не стандартная программа, предоставляющая уплотненное имя; Вы можете использовать спецификацию http://www.codesourcery.com/public/cxx-abi/abi.html. и создает мангуров или делать поклонников вручную, но это, вероятно, излишки).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top