我正在广泛使用 boost 共享指针,所以我正在创建一个具有一堆有用/通用功能的类。作为其中的一部分,我想创建环绕 boost::make_shared 的静态成员函数来分配/构造对象的实例。例如,如果类 A 具有构造函数:
class A {
A(int arg1, double arg2);
...
}
然后围绕 make_shared 的相应包装器将如下所示:
class A {
A(int arg1, double arg2);
static boost::shared_ptr<A> MakeShared(int arg1, double arg2) {
return boost::make_shared<A, int, double>(arg1, arg2);
}
...
}
然后要创建一个实例,您只需执行以下操作:
boost::shared_ptr<A> a_ptr = A::MakeShared(1, 2.3);
显然构造函数和 MakeShared 之间的关系是非常机械的,所以我的问题是是否/如何创建一个预处理器宏或基类,它可以自动为每个构造函数提供 MakeShared 的一个版本?所以代码看起来像这样:
class A {
A(int arg1, double arg2);
A(int arg1, double arg2, bool arg3);
...
DEFINE_CORRESPONDING_MAKE_SHARED_FUNCTIONS
...
}
使用 boost 预处理器库(或其他库)很好,但较大的项目还没有准备好使用 C++11,所以希望我们可以避免这种情况。