Обертывание шаблонной функции C ++

Я пытаюсь обернуть функцию шаблона с помощью опции компоновщика GNU wrap . Код выглядит следующим образом:

// f.h
template<typename T>
void f(T t) {
}

// bar.h
void bar();

// bar.cpp
#include "bar.h"
#include "f.h"

void bar() {
  f(42);
}

// test.cpp
extern "C" {
  extern void __real__Z1fIiEvT_(int i);
  void __wrap__Z1fIiEvT_(int i) {
    __real__Z1fIiEvT_(i);
  }
}

int main() {
  bar();
}

Приведенный выше код связан с помощью следующей команды :

g++ -Xlinker -wrap=_Z1fIiEvT_ -o test test.o bar.o 

К сожалению, это не работает, и всегда вызывается исходная функция f вместо моей обернутой версии __ wrap__Z1fIiEvT_ . Вы видите какие-нибудь ошибки, которые я допустил?

Отредактировано: Как рекомендовано, я добавляю сюда вывод нм , чтобы убедиться, что я не сделал никаких ошибок с искаженным именем функции шаблона:

$ g++ -c bar.cpp -o bar.o
$ nm bar.o
0000000000000000 W _Z1fIiEvT_
6
задан Donald Duck 19 April 2019 в 15:57
поделиться