मैं जीएनयू के लिंकर रैप विकल्प की सहायता से टेम्पलेट फ़ंक्शन को लपेटने का प्रयास करता हूं। कोड इस तरह दिखता है:लपेटना सी ++ टेम्पलेट फ़ंक्शन
// 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
दुर्भाग्य से, यह काम नहीं करता है और हमेशा मूल कार्य च के बजाय कहा जाता है मेरी लिपटे संस्करण __wrap__Z1fIiEvT_। क्या आप मेरी गलतियों को देखते हैं?
संपादित: http://linux.die.net/man/1/ld से
$ g++ -c bar.cpp -o bar.o
$ nm bar.o
0000000000000000 W _Z1fIiEvT_
डबल चेक आप 'एनएम' या इसी तरह के टूल का उपयोग करके सही सजाए गए फ़ंक्शन को कॉल कर रहे हैं। उस से प्रासंगिक आउटपुट को प्रश्न में जोड़ना सहायक हो सकता है। – uesp
एफ (42) नहीं होना चाहिए; एफ (42) हो? –
@ फायर-ड्रैगन-डीओएल - टेम्पलेट फ़ंक्शंस तर्क से उनके तर्क प्रकारों का अनुमान लगाएंगे, और चूंकि int अन्यथा अवांछित पूर्णांक शाब्दिक प्रकार का प्रकार है, यह ठीक काम करता है। यदि एफ एक वर्ग था, तो टेम्पलेट तर्क स्पष्ट होना चाहिए। – Marc