Hoi
Stel ik maak een library die in de interface gebruik maakt van een object-type van een andere library:
MyLib.h
En de implementatie gebruikt die ook:
MyLib.cpp
Dit alles wordt gecompileerd. MyLib.dll, MyLib.h en thirdparty/bitmap_image.hpp worden meegegeven als "pakketje".
Kunnen er dan problemen optreden bij degene die de library gebruikt?
Ik heb (In Visual Studio 2017) dit project gebouwd als Release, en daarna een klein testprogramma gebouwd onder Debug, waardoor de debug opties/checks voor vectors (en andere stl objecten) anders zijn.
Het testprogramma:
Hier ondervind ik geen problemen, maar ik weet dus niet zeker of het altijd zo is.
tl;dr: Kun je objecten (als reference) veilig tussen libraries en programmas doorsturen zonder problemen, als beide kanten van dezelfde header-only library gebruik maken (voor dat object)?

Stel ik maak een library die in de interface gebruik maakt van een object-type van een andere library:
MyLib.h
C++:
1
2
3
4
5
6
7
8
9
10
11
| #pragma once #include <thirdparty/bitmap_image.hpp> #if defined(TESTLIB_EXPORTS) #define TESTLIB_API __declspec(dllexport) #else #define TESTLIB_API __declspec(dllimport) #endif TESTLIB_API void SomeOperation(bitmap_image& img); |
En de implementatie gebruikt die ook:
MyLib.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <thirdparty/bitmap_image.hpp> void SomeOperation(bitmap_image& img) { bitmap_image copy = img; img.setwidth_height(1920, 1080); for (unsigned int y = 0; y < img.height(); y++) { for (unsigned int x = 0; x < img.width(); x++) { double x_src = (double)x / ((double)img.width() / (double)copy.width()); double y_src = (double)y / ((double)img.height() /(double) copy.height()); if (x_src >= copy.width() || y_src >= copy.height()) continue; img.set_pixel(x, y, copy.get_pixel(x_src, y_src)); } } } |
Dit alles wordt gecompileerd. MyLib.dll, MyLib.h en thirdparty/bitmap_image.hpp worden meegegeven als "pakketje".
Kunnen er dan problemen optreden bij degene die de library gebruikt?
Ik heb (In Visual Studio 2017) dit project gebouwd als Release, en daarna een klein testprogramma gebouwd onder Debug, waardoor de debug opties/checks voor vectors (en andere stl objecten) anders zijn.
Het testprogramma:
C++:
1
2
3
4
5
6
7
8
9
10
11
| #include <MyLib.h> #include <thirdparty/bitmap_image.hpp> int main() { auto pic1 = bitmap_image("../testpic.bmp"); SomeOperation(pic1); pic1.save_image("../testout.bmp"); } |
Hier ondervind ik geen problemen, maar ik weet dus niet zeker of het altijd zo is.
tl;dr: Kun je objecten (als reference) veilig tussen libraries en programmas doorsturen zonder problemen, als beide kanten van dezelfde header-only library gebruik maken (voor dat object)?