我正在构建一个静态库,其中通过模板使用泛型。这是该库的样本模板头文件,用于计算平均值
#ifndef AVERAGE_H_
#define AVERAGE_H_
#include<iostream>
#include<vector>
#include<numeric>
template<typename T>
class Average
{
public:
std::vector<T> data;
T getAvg();
};
template<typename T>
T Average<T>::getAvg()
{
T sum=std::accumulate(data.begin(),data.end(),(T)0.0);
return (T)(sum/data.size());
}
#endif /* AVERAGE_H_ */
这是使用上述库代码的示例应用程序代码
#include "Average.h"
int main(int argc,char* argv[])
{
Average<int> *objAvgInt = new Average<int> { };
objAvgInt->data.push_back(1);
objAvgInt->data.push_back(2);
objAvgInt->data.push_back(3);
objAvgInt->data.push_back(4);
objAvgInt->data.push_back(5);
objAvgInt->data.push_back(6);
int avgInt=objAvgInt->getAvg();
std::cout << "Int Avg= " << avgInt << std::endl;
Average<float> *objAvgFloat = new Average<float> { };
objAvgFloat->data.push_back(1);
objAvgFloat->data.push_back(2);
objAvgFloat->data.push_back(3);
objAvgFloat->data.push_back(4);
objAvgFloat->data.push_back(5);
objAvgFloat->data.push_back(6);
float avgFloat=objAvgFloat->getAvg();
std::cout << "Float Avg= " << avgFloat << std::endl;
}
我知道我们不能将模板的声明和定义分成单独的文件(两者都必须在头文件中),但这将我的库代码实现暴露给第三方用户,因为该用户需要库头文件。因此,我想知道是否可以创建一个包含模板定义的库,而无需将其实现部分暴露给第三方用户。