页次: 1
include
+--- thread-pool.h
src
+--- thread-pool.cpp
现有一项目,在thread-pool.h声明有一个类,类中有一个返回类型推导的模板函数
我在thread-pool.cpp中定义了类的构造函数等。唯独这个submitWork()定义在thread-pool.h文件中时,不论是类内定义还是类外定义都可以通过编译。但是在thread-pool.cpp中定义时会报错,这里应当是模板的声明定义分离问题。
我想请教一下,如何实现这个函数在thread-pool.cpp中定义?比如模板类实例化这种方法可不可以用在这里?可以的话应当如何对这个函数做实例化呢?
谢谢
离线
你定义到 .cpp 文件里,用的地方根本找不到你这个模板啊。
离线
你定义到 .cpp 文件里,用的地方根本找不到你这个模板啊。
是这个问题,因为不是模板类,所以直接写到.cpp里去了。但是写到这个模板函数的时候才反应过来有问题。
因为查过有一种方式是通过实例化模板类,来实现声明定义的分离,所以我想请教一下,能不能对这个模板函数实现实例化
(我不想直接放进.h里,想看看有没有其他解决方法
离线
我之前有过这样的处理经历,我认为的方法是这样的:在 .h文件类的申明之后include .cpp文件并且 .cpp文件中include .h文件,之后使用#ifdef、#define来解决重复include的问题
离线
我之前有过这样的处理经历,我认为的方法是这样的:在 .h文件类的申明之后include .cpp文件并且 .cpp文件中include .h文件,之后使用#ifdef、#define来解决重复include的问题
谢谢,我琢磨一下
离线
我想请教一下,如何实现这个函数在thread-pool.cpp中定义?比如模板类实例化这种方法可不可以用在这里?可以的话应当如何对这个函数做实例化呢?
谢谢
你这个需求就非常奇怪,我不知道你是怎么理解include头文件机制的
反正就是模板声明其实就是一段文本,写在头文件(.h)里面和源文件(.cpp)并没有本质区别,
只是写在头文件里面可以用include导出复制到处使用而已。
你手动复制保证这一段文本在不同的.cpp文件中是一样的,也可以实现到处使用的效果。
而且如果你不介意,并且代码也只是你自己一个人看,
你可以新建一个叫template.cpp的文件,然后在里面写template模板
在别的cpp文件中,要用到模板的地方来一句#include <template.cpp>也没问题
C/C++又没有规定#include指定只能对头文件使用,其实是可以对任何文件使用的,问题只在于include的文件是否存在,存在的话,完成include替换之后是否会编译错误而已。
离线
你这个需求就非常奇怪,我不知道你是怎么理解include头文件机制的
反正就是模板声明其实就是一段文本,写在头文件(.h)里面和源文件(.cpp)并没有本质区别,
只是写在头文件里面可以用include导出复制到处使用而已。你手动复制保证这一段文本在不同的.cpp文件中是一样的,也可以实现到处使用的效果。
而且如果你不介意,并且代码也只是你自己一个人看,
你可以新建一个叫template.cpp的文件,然后在里面写template模板
在别的cpp文件中,要用到模板的地方来一句#include <template.cpp>也没问题C/C++又没有规定#include指定只能对头文件使用,其实是可以对任何文件使用的,问题只在于include的文件是否存在,存在的话,完成include替换之后是否会编译错误而已。
因为个人习惯问题,对于非模板类我倾向于声明和定义分离到头文件和源文件里,这次也是头一次遇见定义了模板成员函数,所以才有了这个问题
关于c++头文件机制我也没有系统学习过,是平常看一些文章了解的。因为还没有实习和工作,没有这方面的经验,我更倾向于平时写代码尽可能向业界规范靠拢
关于你说的方式,我会试一下,谢谢
离线
页次: 1