首页 > 解决方案 > 从头文件中删除 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"

...

或者这会对使用该库的项目产生不良后果吗?

标签: c++shared-librariespimpl-idiom

解决方案


推荐阅读