2012-05-30 127 views
0

它是否存在执行链接时约束的任何方法 - 如果对象实例创建为静态而无需外部链接,或者反之亦然?检查是否创建了没有外部链接的对象

例如:

// test.cpp 

// correct 
namespace{ 
static MyObject obj; 
} 

//test.h 

struct Obj 
{ 
    // wrong 
    static MyObject m_obj; 
} 

在这种情况下连接错误作为诊断信息是确定。

据我了解,在编译时不可能创建类似的东西。

+0

你试图找出什么用途? – Nawaz

+0

很难说。一般来说,这是架构和代码风格的要求。 –

回答

0

糟糕的方式,但你可以使用宏(我不认为这是你所需要的)

#define MyObject MyObject 
... 
#ifdef MyObject 
#error somemessagethere 
#endif 

或是单纯的声明之前在.h文件中的extern键入

我记得,在函数之外使用的static关键字意味着变量/函数实例只应该存在于当前模块中。

+0

德米特里,我知道。要求不是在当前模块外部创建特殊类型的对象,因为有时它会导致由难看的对象设计导致的难以检测到的错误。关键是如果有人会忘记这个要求,就会在连接时间中否认它。 –

+0

现在我明白了原来的问题。 我没有想法免除编写自定义代码分析工具或强制代码审查实践在你的团队。因为从C++的角度来看,描述“//错误”的行为是绝对正确的。 –