Newsgroup: it.comp.lang.c++
Titolo: Come creare funzioni di libreria?

Scusate potreste postarmi un semplice esempio di creazione di funzione di
libreria. Ovviamente diamo per scontato che abbia già la mia funzione:
int fattoriale(int n){
    if(n==0) return 1;
    return n*fattoriale(n-1);
}
come faccio a farla diventare una funzione della mia ipotetica libreria (da
creare) "mylib.h"?
vi ringrazio anticipatamente
Mario

libreria. Ovviamente diamo per scontato che abbia già la mia funzione:
Devi usare una utility che ti permetta di fare questa operazione .
Ad esempio per il compilatore Borland dovrebbe ancora esistere
TLIB.EXE .
Per aggiungere una funzione ad una libreria puoi fare cosi :
 tlib.exe mylib.lib +myfunz.obj,mylib.lst
per estrarre una funzione (compilata) puoi usare il segno * 
mentre per eliminarne una il segno -   (meno) .
Nell'ambiente integrato invece specifichi il progetto come libreria .
In questo caso l'output del progetto sara' il file LIB che hai
richiesto .

 creare) "mylib.h"?
C'e' una grossa confusione di fondo.  "mylib.h" non e' una libreria ma
un header file.  Se non capisci che differenza c'e', consulta un buon
testo base di C++.
Facciamo un esempio: supponiamo che tu abbia creato un oggetto
funzionale che genera numeri di Fibonacci, incapsulato in una classe
di nome "fibo".  La classe viene dichiarata in un file "fibo.h" ed il
metodo implementato in un file separato "fibo.cxx"; il contenuto
potrebbe essere il seguente:
MLO@mlinux 22 $ cat fibo.h
#ifndef FIBO_H_
#define FIBO_H_
class fibo {
private:
  unsigned long penultimo;
  unsigned long ultimo;
public:
  fibo() : penultimo(0), ultimo(0) {}
  unsigned long operator()();
};
#endif // FIBO_H_
MLO@mlinux 23 $ cat fibo.cxx
#include "fibo.h"
unsigned long fibo::operator()() {
  unsigned long questo = ultimo ? ultimo + penultimo : 1;
  penultimo = ultimo;
  return ultimo = questo;
}
A questo punto crei la tua libreria; visto che non nomini il tuo
ambiente, supponiamo per amore di discussione che tu abbia un sistema
operativo decente (Unix) ed un compilatore come si deve (g++): in
questo caso darai questi comandi (il primo crea un object file, il
secondo lo inserisce all'interno di una libreria).
MLO@mlinux 24 $ g++ -ansi -Wall -c fibo.cxx
MLO@mlinux 25 $ ar -cru libfibo.a fibo.o
Poi creiamo un main che utilizza la tua funzione, compiliamolo facendo
uso della libreria ed eseguiamolo:
MLO@mlinux 26 $ cat testFibo.cxx
#include <iostream>
#include <algorithm>
#include "fibo.h"
int main() {
  const unsigned int number(10);
  std::cout << "I primi " << number << " numeri di Fibonacci sono: ";
  std::generate_n(std::ostream_iterator<unsigned long>(std::cout, " "),
                  number, fibo());
  std::cout << std::endl;
  return 0;
}
MLO@mlinux 27 $ g++ -ansi -Wall -o testFibo testFibo.cxx -L. -lfibo
MLO@mlinux 28 $ ./testFibo
I primi 10 numeri di Fibonacci sono: 1 1 2 3 5 8 13 21 34 55 
MLO@mlinux 29 $
Chiaro adesso?  "man g++", "man ar" (ovvero una sana lettura dei
manuali) chiariranno tutti i tuoi dubbi residui.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.