Taka ciekawostka/zagadka, wszystko bardzo podobnie wygląda a kompiluje się tylko jeden wariant.
- wersja 1
// MyClass.h *****************
#pragma once
#include <memory>
class MyClass {
public:
MyClass();
void someFunction();
private:
struct Impl;
std::unique_ptr<Impl> pImpl;
};
// MyClass.cpp *****************
#include "MyClass.h"
#include <vector>
struct MyClass::Impl {
std::vector<int32_t> dataIN;
std::vector<uint8_t> dataOUT;
};
MyClass::MyClass() : pImpl(std::make_unique<Impl>()) {}
void MyClass::someFunction() {
// Przykładowe użycie
pImpl->dataIN.push_back(42);
pImpl->dataOUT.push_back(255);
}
- wersja 2
// MyClass.h *****************
#pragma once
#include <memory>
class MyClass {
public:
MyClass();
~MyClass() = default;
void someFunction();
private:
struct Impl;
std::unique_ptr<Impl> pImpl;
};
// MyClass.cpp *****************
#include "MyClass.h"
#include <vector>
struct MyClass::Impl {
std::vector<int32_t> dataIN;
std::vector<uint8_t> dataOUT;
};
MyClass::MyClass() : pImpl(std::make_unique<Impl>()) {}
void MyClass::someFunction() {
// Przykładowe użycie
pImpl->dataIN.push_back(42);
pImpl->dataOUT.push_back(255);
}
- wersja 3
// MyClass.h *****************
#pragma once
#include <memory>
class MyClass {
public:
MyClass();
~MyClass();
void someFunction();
private:
struct Impl;
std::unique_ptr<Impl> pImpl;
};
// MyClass.cpp *****************
#include "MyClass.h"
#include <vector>
struct MyClass::Impl {
std::vector<int32_t> dataIN;
std::vector<uint8_t> dataOUT;
};
MyClass::~MyClass() = default;
MyClass::MyClass() : pImpl(std::make_unique<Impl>()) {}
void MyClass::someFunction() {
// Przykładowe użycie
pImpl->dataIN.push_back(42);
pImpl->dataOUT.push_back(255);
}
