c++ - 从头文件中删除 pimpl
问题描述
我目前已经使用 pImpl 习语实现了一个库(只是一个例子);
// 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();
}
现在,我想从头文件中删除尽可能多的不需要的信息,用于使用库的构建版本的另一个项目。我想知道是否有更好的方法可以从标题中删除内部结构,lib_public_type
而无需维护两个单独的标题?
有没有可能做类似的事情;
// 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"
...
或者这会对使用该库的项目产生不良后果吗?
解决方案
推荐阅读
- python - 产生 SyntaxError 的 Lambda 表达式
- javascript - JavaScript:在 window.location 改变时播放声音
- sql - SQL查询从一列中获取最大值,但同时保留另一列不属于pf group by
- perforce - Perforce P4V 获取指示器
- ios - Xcode 显示在 CoreData 类上使用未声明类型
- python-3.x - 这两种算法都是选择排序算法吗?
- python - 如何让 Python 导航到链接并从此子链接打印多个数据点?
- apache-spark - Spark数据框计算行最小值
- javascript - 用于集成功能的 mathjs 需要帮助安装特定的 npm
- postgresql - 超级用户可以在没有分配特定数据库的情况下登录 PostgreSQL 服务器吗?