我试图想出一种在多个文件之间共享数据的好方法,但我确定某些方法比其他方法更好,所以我来这里问最安全的方法以这种方式共享数据的方法。在下面的例子中,我将展示我到目前为止一直在做什么,但我觉得这不是最好的方法。
让我们举个例子,我有5个文件:file1.h,file1.cpp,file2.h file2.cpp和main.cpp。他们可能看起来像这样:
//main.cpp
#include "file1.h"
#include "file2.h"
int main(){
PushOne pushOne;
PushTwo pushTwo;
pushOne.Push();
pushTwo.Push();
for (int i =0; i<q.size(); i++){
std::cout << q.front() << std::endl;
q.pop();
}
return 0;
}
//file1.h
namespace Foo{
extern std::queue<int> q; //resource to be shared across files
class PushOne{
public:
void Push();
};
}
//file1.cpp
#include "file1.h"
namespace Foo{
std::queue<int> q;
void PushOne::Push(){
q.push(1);
}
}
//file2.h
#include "file1.h" //#include this to have access to namespace variables declared in this file...Seems sort of inefficient
namespace Foo{
class PushTwo{
public:
void Push();
};
}
//file2.cpp
#include "file2.h"
namespace Foo{
void PushTwo::Push(){
q.push(2);
}
}
所以在这里,我有一个名称空间变量std :: queue q,我想在file1和file2中访问它。我似乎不得不将这个命名空间变量放入两个文件中的一个并且#include另一个文件,这似乎没有意义。有没有更好的方法呢?这似乎给予了一些不对称的&#34;访问std::queue<int> q
。我甚至不知道这是否一定是消极的,但也许有人可以对这种方法的效率有所了解或提出另一种方法。
答案 0 :(得分:2)
如果您确实想这样做,请在头文件中定义一个带静态元素的结构:
MyQueue.h:
struct MyQueue {
static std::queue<int> q;
}
您还必须在相应的.cpp文件中定义变量。
MyQueue.cpp:
#inclue "MyQueue.h"
static std::queue<int> MyQueue::q;
您可以通过包含该标题的任何文件访问它,例如:
MyQueue::q.push(2);
这仍然是我不推荐的,特别是如果有多个线程,因为它是一个全局变量。
另一种选择是使用单身,但这也有同样的问题。