The*_*eer 3 c++ templates weak-symbol
创建了模板函数C++ template <class T> void myswap(T&d,T&s)。Main将其用于int,double,复杂类型。使用g ++编译源代码。通过nm转储符号表时,为各个类型生成的函数具有符号类型“ W”。
为什么将它们生成为弱符号?
#include <iostream>
#include <complex>
template <class T>
void myswap(T& d, T& s)
{
T temp = d;
d=s;
s=temp;
}
int main(void)
{
int m=5,n=6;
std::cout << "m=" << m << " n=" << n <<std::endl;
myswap(m,n);
std::cout << "m=" << m << " n=" << n <<std::endl;
double p=4.3,q=5.6;
std::cout << "p=" << p << " q=" << q <<std::endl;
myswap(p,q);
std::cout << "p=" << p << " q=" << q <<std::endl;
std::complex<double> r(2.3,5.7), s(1.2,3.4);
std::cout << "p=" << r << " q=" << s <<std::endl;
myswap(r,s);
std::cout << "p=" << r << " q=" << s <<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过隐式实例化生成的功能模板专业化与内联函数相似,因为如果多个转换单元生成相同的实例化,则不会违反ODR。如果不是这样,那么模板将几乎无法使用。
弱链接是在典型的实现中使之成为可能的机制。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |