STL,模板与链接

Qlaiaqu 2010-01-08 11:44:25
STl是以文件形式提供的,而不是以DLL或者Lib文件提供的。
我们在使用Stl的时候并没有直接的将STl的文件添加到工程中,而只是IDE本身包含了其目录而已。
假设我创建了一个模板类,模板中使用的是自己创建的类,怎么安排能像使用stl一样方便了?
还请大家集思广益,非常感谢。
...全文
143 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
windsting 2010-01-09
  • 打赏
  • 举报
回复
你的意思就是说,你的类是一个 .h 加一个 .cpp 的文件?
如果你的类本身不很大的话,可以考虑把所有成员函数写成inline的,
这样就只剩下一个头文件了,不知道可是你的意思?
  • 打赏
  • 举报
回复
模板本身就以源码的形式提供.
到include目录看看
stl的实现都在那里放着呢/
Qlaiaqu 2010-01-09
  • 打赏
  • 举报
回复
非常感谢以上为的回帖,你们给了我很多启发,再次感谢,结贴给分。
mstlq 2010-01-09
  • 打赏
  • 举报
回复
既然已经用到自己的非模板类了……
楼主还是用lib和dll吧……

否则,请更改自己的设计咯……
把S和T也做成模板类,这样就可以只用h文件了……
gcc_gun 2010-01-09
  • 打赏
  • 举报
回复
把自己的头文件和源文件都拷贝到系统路径下,就像linux那样,呵呵,这样你以后就都能够用了不是~~~
不知道楼主是不是这样意思。
DLevel 2010-01-09
  • 打赏
  • 举报
回复
模板不支持分离编译,所以声明和实现制能放一起,
A,B不想DLL,也要保证跟你模板一样以源代码形式交给客户程序员。

那A,B只能都定义成模板了吧。
老邓 2010-01-09
  • 打赏
  • 举报
回复
Boost楼主应该很熟悉,WTL是一个GUI开源工程,寄托在sourceforge.net上。
老邓 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fengxuxing 的回复:]
非常抱歉没有说清楚,是这样的,我创建了一个模板类
template <class S, class T>
class  DATABASE_API Store
{
public:
Store(){m_data = new S();}
~Store(){delete m_data;}
int Add(vector <T> &vec){return m_data->Add(vec);}
int Delete(vector <T> &vec){return m_data->Delete(vec);}
int Update(vector <T> &vec){return m_data->Update(vec);}
int Query(const char *sql, vector <T> &vec){return m_data->Query(sql, vec);}
private:
S *m_data;
};
其中的S,T是自己创建的类型,S用于操作结构体T
我在外部多个模块想使用类Store
比如Store <A,B> store;
我不想将其编译成DLL,或者根本不建议编成DLL,所以我想各个模块采用共享的方式直接调用这个模板,其中的A,B都以源码形式提供,有没有什么方式可以实现?
非常感谢以上各位的回帖!!
[/Quote]
楼主可以参考下WTL的源码,纯头文件实现的界面库。
也可以参考下Boost的源码,大部分库都是纯头文件实现。
ssdx 2010-01-09
  • 打赏
  • 举报
回复
还有什么是“我们在使用Stl的时候并没有直接的将STl的文件添加到工程中,而只是IDE本身包含了其目录而已。 ”

你编译连接的时候 是编译器连接器在做事 跟IDE有什么关系。你所谓的IDE包含,也是编译器连接器用到了。

cattycat 2010-01-09
  • 打赏
  • 举报
回复
直接include你的头文件,或者把这个头文件和实现包含到你的项目工程中。
stl的类声明和实现都是在h文件中的,所以只包含头文件就行了,你也可以这样,写到头文件中,以后每次用的时候把这个包含进来就行。
ssdx 2010-01-09
  • 打赏
  • 举报
回复


模版是编译期用的,你运行时要动态调用?

是不是想搞个反射之类的东西
Qlaiaqu 2010-01-09
  • 打赏
  • 举报
回复
非常抱歉没有说清楚,是这样的,我创建了一个模板类
template<class S, class T>
class DATABASE_API Store
{
public:
Store(){m_data = new S();}
~Store(){delete m_data;}
int Add(vector<T> &vec){return m_data->Add(vec);}
int Delete(vector<T> &vec){return m_data->Delete(vec);}
int Update(vector<T> &vec){return m_data->Update(vec);}
int Query(const char *sql, vector<T> &vec){return m_data->Query(sql, vec);}
private:
S *m_data;
};
其中的S,T是自己创建的类型,S用于操作结构体T
我在外部多个模块想使用类Store
比如Store<A,B> store;
我不想将其编译成DLL,或者根本不建议编成DLL,所以我想各个模块采用共享的方式直接调用这个模板,其中的A,B都以源码形式提供,有没有什么方式可以实现?
非常感谢以上各位的回帖!!
wwq100 2010-01-09
  • 打赏
  • 举报
回复
学习了
wanghao111 2010-01-09
  • 打赏
  • 举报
回复
把你写的放到IDE的目录下
kingstarer 2010-01-09
  • 打赏
  • 举报
回复
你的类必须写在一个文件里面

如若不然就要使用很难看的形式

class.h
=========
class DEMO
{
...
};

#include "class.cpp"

aaaa3105563 2010-01-08
  • 打赏
  • 举报
回复
up
mstlq 2010-01-08
  • 打赏
  • 举报
回复
模版中使用楼主自己创建的非模板类?

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧