На конференции по математике речь зашла о програмировании. Один из участников спросил не знаю ли я как сделать "библиотеку из шаблонов", так как он использует свой шаблон только с определенным количеством типов.
Я написала ему вот такой вариант:
a.h:
instantiation.cpp:
main.cpp
Компиляция:Я написала ему вот такой вариант:
a.h:
#pragma once
#include <iostream>
#include <algorithm>
template <class T>
class A
{
int size;
T* a;
public:
A(int s): size(s), a(new T[s]) { std::cerr << "A::A(int s)\n";} ;
~A() { std::cerr << "A::~A()\n"; delete [] a; }
A(const A& source):
size(source.size), a(new T[source.size])
{
std::cerr << "A::A(const T&)\n" ;
std::copy(source.a, source.a + source.size, a);
}
bool compare(const T* with, int s) {
std::cerr << "A::compare(const T&)";
if (size == s)
return std::equal(a, a + size, with);
return false;
}
};
#include "a.h"
template class A<int>;
#include <iostream>
#include "a.h"
using namespace std ;
extern template class A;
int main()
{
typedef A<int> IntA ;
IntA ia(5) ;
IntA ia1 = ia;
int* a = new int[5];
ia.compare(a, 5);
delete [] a;
}
$ g++ -fno-implicit-templates -c main.cpp
$ g++ fno-implicit-template -c instantiation.cpp
$ g++ main.o instantiation.o
Я мало сталкивалась с шаблонами, поэтому с радостью услышу критику такого подхода.