Cześć. Załóżmy, że mamy aplikację (exe) pisaną w VS2012 i dllkę pisaną w VS2015. Wiem, że nie można zrobić czegoś takiego:
//dll
class MyClass
{
public:
MyClass(std::string & name);
}
Zamiast std::string powinno się tu użyć po prostu char*
To jest jasne. Ale jasnym też jest, że czasem po prostu chcemy używać standardowej biblioteki. W końcu po coś ona powstała. Więc z pomocą przychodzi pImpl:
//dll.h
class MyClass
{
public:
MyClass(char * name);
private:
class Impl;
Impl * m_pImpl;
}
//dll.cpp
class MyClass::Impl
{
public:
std::string m_name;
Impl(char * name)
{
m_name = name;
}
}
MyClass::MyClass(char * name)
{
m_pImpl = new Impl(name);
}
Z tego, co wiem, to już jest całkowicie dozwolone, zgadza się? I teraz w klasie Impl mogę sobie spokojnie używać wszystkiego na co mam ochotę, tak?