动态链接库+函数模板
想为快速排序建⼀个动态链接库好在以后写算法的时候直接调⽤。为了便于复⽤,使⽤了函数模板,头⽂件如下:
#ifdef SORTDLL_EXPORTS
#define SORT_API __declspec(dllexport)
#else
#define SORT_API __declspec(dllimport)
#endif
// other functions
template<typename T>
SORT_API
void quicksort(T *a, int size);
⾃然地,在CPP⽂件⾥这么定义:
template<T>
void quicksort(T*a, int size)
{
// implements
}
⽣成成功,但是在另⼀个项⽬⾥调⽤quicksort函数时却显⽰链接错误
error LNK2019: ⽆法解析的外部符号 "__declspec(dllimport) void __cdecl quicksort<class Point>(class Point *,int)" (__imp_??$quicksort@VPoint@@@@YAXPAVP fatal error LNK1120: 1 个⽆法解析的外部命令
就这么个玩意⼉⿎捣了半天,读了⼀篇别⼈的博客才知道quicksort函数压根没被导出(好烦哪),⽽简单的解决⽅案就是在动态链接库的
CPP⽂件中给想要的类型T做⼀个函数定义,我这⼉的T是个Point类:
SORT_API
void quicksort(Point *a, int size)
{
//  implements
}
这时,在另⼀个项⽬内成功调⽤了quicksort进⾏排序。
sort命令排序虽然解决了还是有点⼩开⼼,不过转念⼀想,我还要函数模板⼲啥,既然我得⼀个个实现。不过好在,在动态链接库内⼀些不导出的函数可
以使⽤函数模板,⽐如快速排序⽤到的partition函数,所以虽然得给每⼀个类型T实现⼀次⼯作量也并不⼤,不过却觉得这样的解决不怎么
优雅,希望有更好的⽅案。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。