像这样的pimpl实现有没有更简单的语法?

时间:2017-05-02 22:13:49

标签: c++

以下模式是否有更简单的语法?你可以按照下面的描述去做,但是对于一个非常简单的想法,它不是简洁的代码。是否有一些库让我不那么尴尬或者我应该考虑其他一些模式?

#include <iostream>
template <typename T>
class abstr
{
public:
    class subclass
    {
    public:
        virtual void x(T) = 0;
    };
    void doThing(T a)
    {
        m_a->x(a);
    }
    abstr(subclass* a)
    {
        m_a = a;
    }
    subclass* m_a;
};

class concr : public abstr<int>::subclass
{
public:
    void x(int a)
    {
        std::cout << "hi!" << a;
    }

};

int main()
{
    concr a;
    abstr<int> r = abstr<int>(&a);
    r.doThing(5);
}

1 个答案:

答案 0 :(得分:1)

Loki有一个pimpl帮手:

http://loki-lib.sourceforge.net/index.php?n=Idioms.Pimpl

但如果我没记错的话,它主要有助于指针管理,复制构造等。 繁琐的部分仍由你决定。