0

我知道如何在 C++ 中做一个不透明的对象,如下所示:

// my_class.hpp
class opaque_object;
class my_class {
    my_class();
    ~my_class();
    opaque_object *m_opaque_object;
};

// my_class.cpp
#include <my_class.hpp>
class opaque_object {
    // ...
};
my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }

现在,当不透明对象是不同命名空间中的现有类模板而不包括该类模板的头文件时,如何做到这一点。下面的代码不好,只是为了说明我的问题。

// my_class.hpp
class third::party::library::opaque_object<
    third::party::library::templated_class>;

class my_class {
    my_class();
    ~my_class();
    third::party::library::opaque_object<
        third::party::library::templated_class> *m_opaque_object;
};

// my_class.cpp
#include <my_class.hpp>
#include <third/party/library/opaque_object.hpp>
#include <third/party/library/template_class.hpp>

typedef third::party::library::opaque_object<
    third::party::library::templated_class> opaque_object;

my_class::my_class() { m_opaque_object = new opaque_object(); }
my_class::~my_class() {delete m_opaque_object; }

我的源代码的实际类比这个例子更加模板化(模板的 4 个参数,其中一些本身就是模板类)。

由于 my_class.hpp 在我的项目中无处不在,因此一般编译需要花费大量时间(只需 5 秒即可为每个 cpp 文件包含 my_class.hpp),因此我想避免包含 opaque_object.hpp、template_class.hpp ...在 my_class.hpp 中。

如何才能做到这一点 ?欢迎任何评论或想法。在此先感谢您的时间。

4

2 回答 2

0

为什么不将其设为模板模板参数(不知道是否需要更多参数:)

template <typename T, template <class> typename opaque>
class my_class
{
...
    opaque<T>* opaque_;
};
于 2010-02-02T15:08:11.400 回答
0

需要使用正确的命名空间声明每个模板类以及模板(模板参数)所需的每个类。

于 2010-05-17T06:30:43.607 回答