gpt4 book ai didi

c++ - "predefine"和使用命名空间和 std::shared_ptr 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 00:53:59 25 4
gpt4 key购买 nike

我一直很难找到与此问题类似的任何内容,所以我会在这里提问。

我有一个包含十几个源文件/头文件的项目。我遇到的主要问题是预定义我在命名空间中创建的类。代码如下:

“GlobalIncludes.h”

/*include dependencies and library headers...*/

/*[Note 1]How would I predefine the classes inside namespaces?*/

typedef std::tr1::shared_ptr<Class1> ClassPtr1;//[Note 2]
typedef std::tr1::shared_ptr<Class2> ClassPtr2;//[Note 2]

/*[Note 2]What is the correct way to predefine the shared_ptr's?*/

#include "Class1.h"
#include "Class2.h"

“Class1.h”

namespace myNamespace
{
class Class1
{
/*variables and functions*/
void doSomething(...);
Class2 exampleObject;
};
}

“Class2.h”

namespace myNamespace
{
class Class2
{
/*variables and functions*/
};
}

如果这听起来有点困惑,我提前道歉......基本上我想知道是否可以预定义 namespace myNamespace 中的类,同时声明 shared_ptr。如果这是可能的,我将如何做到这一点并在源代码中正确使用它们?

最佳答案

如果您希望类型定义与类属于同一个命名空间(我建议这样做):

namespace my_namespace
{
class Class1;
class Class2;

typedef std::tr1::shared_ptr<Class1> ClassPtr1;
typedef std::tr1::shared_ptr<Class2> ClassPtr2;
}

#include "Class1.h"
#include "Class2.h"

否则,如果您希望指针类型定义成为全局命名空间的一部分

namespace my_namespace
{
class Class1;
class Class2;
}

typedef std::tr1::shared_ptr<my_namespace::Class1> ClassPtr1;
typedef std::tr1::shared_ptr<my_namespace::Class2> ClassPtr2;

#include "Class1.h"
#include "Class2.h"

可能,您可以使用宏(相同的命名空间)使事情变得更紧凑:

#define DECLARE_PTR_ALIAS(N, C, P) \
namespace N { class C;
typedef std::tr1::shared_ptr<C> P; } \

或者(不同的命名空间):

#define DECLARE_PTR_ALIAS(N, C, P) \
namespace N { class C; } \
typedef std::tr1::shared_ptr<N::C> P;

这将使为多个类定义指针别名变得更简单:

DECLARE_PTR_ALIAS(my_namespace, Class1, ClassPtr1)
DECLARE_PTR_ALIAS(my_namespace, Class2, ClassPtr2)
...

关于c++ - "predefine"和使用命名空间和 std::shared_ptr 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com