社区
C++ 语言
帖子详情
STL,模板与链接
Qlaiaqu
2010-01-08 11:44:25
STl是以文件形式提供的,而不是以DLL或者Lib文件提供的。
我们在使用Stl的时候并没有直接的将STl的文件添加到工程中,而只是IDE本身包含了其目录而已。
假设我创建了一个模板类,模板中使用的是自己创建的类,怎么安排能像使用stl一样方便了?
还请大家集思广益,非常感谢。
...全文
190
17
打赏
收藏
STL,模板与链接
STl是以文件形式提供的,而不是以DLL或者Lib文件提供的。 我们在使用Stl的时候并没有直接的将STl的文件添加到工程中,而只是IDE本身包含了其目录而已。 假设我创建了一个模板类,模板中使用的是自己创建的类,怎么安排能像使用stl一样方便了? 还请大家集思广益,非常感谢。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
windsting
2010-01-09
打赏
举报
回复
你的意思就是说,你的类是一个 .h 加一个 .cpp 的文件?
如果你的类本身不很大的话,可以考虑把所有成员函数写成inline的,
这样就只剩下一个头文件了,不知道可是你的意思?
珍惜生命远离CPP
2010-01-09
打赏
举报
回复
模板本身就以源码的形式提供.
到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
打赏
举报
回复
模版中使用楼主自己创建的非模板类?
C++在动态
链接
库里面使用
STL
模板
类如String
自己开发了一个DLL里面用到了String和vector,然后自己的代码引用这个DLL,但是运行时总会出错,有时是Debug模式下出错,有时是Release模式下出错。经过几次实验,debug 设置为MDd, release设置为MT,暂时可以使用了,至于为什么这样不清楚,有没有大佬知道怎么解决这个问题?寻找资料后大致原因是
STL
模板
在跨域释放内存会出错,这个问题似乎没有好的解决方法,下面是关于这个问题的解释。和生成代码方式有关,就在Visual Studio里面设置下。
vector相关的
模板
类函数声明与实现
模板
类的函数声明与实现
C++
模板
编程:从泛型思想到
STL
实战应用
泛型编程是程序设计的重要范式,其核心思想是通过参数化类型实现代码的通用性。在C++中,这一思想通过
模板
技术得以实现,允许开发者编写与具体数据类型无关的算法和数据结构。
模板
的工作原理是在编译期进行类型替换和代码生成,这一过程称为
模板
实例化,它能显著提升代码的复用性和类型安全性。从工程实践角度看,
模板
技术构成了C++标准
模板
库(
STL
)的基石,`vector`、`list`等容器以及`sort`、`find`等算法都基于
模板
构建,支持对任何符合要求的自定义类型进行操作。掌握
模板
不仅有助于理解现代C++的智能指针
模板
进阶:从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑
刚开始学 C++
模板
时,总觉得 “写个template
就能搞定所有场景”—— 直到遇到 “想固定数组大小却只能用宏定义”“比较指针时总是比地址而非内容”“
模板
分离编译报一堆
链接
错误” 这些问题,才发现自己对
模板
的理解只停留在 “入门” 阶段。 其实
STL
能成为 C++ 的 “利器”,背后全靠
模板
进阶特性支撑。这篇博客就从非类型
模板
参数“
模板
特化”“
模板
分离编译” 三个维度,用 “问题 + 代码 + 解析” 的方式帮你打通
模板
进阶的关键链路。
C++
模板
编程入门:从函数
模板
到类
模板
的泛型编程实践
泛型编程是C++中实现代码复用的核心技术,它允许开发者编写与具体数据类型无关的通用算法和数据结构。其核心原理是通过
模板
机制,在编译期根据实际使用的类型生成特化代码,从而实现类型安全的高效复用。这种技术价值在于显著提升代码的可维护性和扩展性,避免了为不同数据类型重复编写相似逻辑的“重复造轮子”问题。在工程实践中,泛型编程广泛应用于构建通用容器(如vector、list)和算法库,是现代C++标准
模板
库(
STL
)的基石。本文以栈(Stack)和最大值函数为例,深入解析函数
模板
和类
模板
的实现机制,涵盖
模板
实例化、
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章