искажение имени шаблона g ++ - PullRequest
3 голосов
/ 03 ноября 2010

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

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

template < typename U >
void f () {
  asm ("somecommand T<U>::x");
}

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

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

nm --demangle foo.o дает вам расколотые имена для ваших символов nm --no-demangle foo.o дает вам искаженные имена для ваших символов.

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

0 голосов
/ 03 ноября 2010

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

...