Я создаю статическую библиотеку, в которой я использую шаблоны с помощью шаблонов.Это пример файла заголовка шаблона библиотеки для вычисления среднего значения
#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;
}
Я знаючто мы не можем разделить объявление и определение шаблона в отдельных файлах (оба должны быть в заголовочном файле), но это предоставляет мою реализацию кода библиотеки стороннему пользователю, так как пользователю нужны файлы заголовков библиотеки.Поэтому я хочу знать, возможно ли создать библиотеку, содержащую определения шаблонов, без предоставления ее части реализации стороннему пользователю.