Удаление pimpl из заголовочного файла - PullRequest
1 голос
/ 10 марта 2020

В настоящее время я реализовал библиотеку с использованием идиомы 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"

...

Или это может иметь нежелательные последствия для проекта с использованием библиотеки?

...