C++ 从头文件中删除pimpl
我目前已经使用pImpl习惯用法实现了一个库(只是一个示例)C++ 从头文件中删除pimpl,c++,shared-libraries,pimpl-idiom,C++,Shared Libraries,Pimpl Idiom,我目前已经使用pImpl习惯用法实现了一个库(只是一个示例) 或者这会对使用库的项目产生不必要的后果吗?这不是一个好主意。带pimpl的lib_public_type的内存签名不同于不带pimpl的lib_public_type。如果将lib\u public\u type传递到库中,比如调用非静态方法时,Crom只知道会发生什么。这就是我所担心的,您可以推荐任何其他习惯用法或解决方案来获得“cleaner”头吗?只需完全删除该类并将其替换为不透明对象,即表示该类的句柄,还有一些免费函数,它们获
或者这会对使用库的项目产生不必要的后果吗?这不是一个好主意。带pimpl的
lib_public_type
的内存签名不同于不带pimpl的lib_public_type
。如果将lib\u public\u type
传递到库中,比如调用非静态方法时,Crom只知道会发生什么。这就是我所担心的,您可以推荐任何其他习惯用法或解决方案来获得“cleaner”头吗?只需完全删除该类并将其替换为不透明对象,即表示该类的句柄,还有一些免费函数,它们获取并释放句柄,将句柄转换为类实例,并调用类上的适当方法。与pimpl一起生活可能会更好。另一方面,如果你打算使用共享库,这可能是一种方式。您可能无法保证库的所有用户都将使用完全相同的std::unique_ptr
实现。这不是一个好主意。带pimpl的lib_public_type
的内存签名不同于不带pimpl的lib_public_type
。如果将lib\u public\u type
传递到库中,比如调用非静态方法时,Crom只知道会发生什么。这就是我所担心的,您可以推荐任何其他习惯用法或解决方案来获得“cleaner”头吗?只需完全删除该类并将其替换为不透明对象,即表示该类的句柄,还有一些免费函数,它们获取并释放句柄,将句柄转换为类实例,并调用类上的适当方法。与pimpl一起生活可能会更好。另一方面,如果你打算使用共享库,这可能是一种方式。您可能无法保证库的所有用户将使用完全相同的std::unique_ptr
实现。
// library.h
class lib_public_type
{
class impl;
std::unique_ptr<impl> impl__;
public:
void libTypeFunction();
}
// library.cpp
#include "library.h"
class lib_public_type::impl
{
private:
std::string libVar1;
void libPrivateFunction1()
{
...
}
void libPrivateFunction2()
{
...
}
}
lib_public_type::libTypeFunction()
{
libPrivateFunction1();
libPrivateFunction2();
}
// library.h
#ifndef PROVIDES_IMPL
// define as empty string if not already defined
#define PROVIDES_IMPL
#endif
class lib_public_type
{
PROVIDES_IMPL
public:
void libTypeFunction();
}
// library.cpp
#define PROVIDES_IMPL class impl;\
std::unique_ptr<impl> impl__;
#include "library.h"
...