我在类定义期间遇到struct初始化问题。我知道C ++标准不允许在类定义期间定义变量,除了static const
变量。
在我的情况下,我已经生成了许多结构初始化的C代码。此代码中的所有POD变量(纯C代码)都是全局的。我想让这个POD本地,所以我尝试将这个代码包含在一个类中,需要解决struct初始化的问题。生成的结构的基本示例是:
// generated C-code
struct G { int a; };
G GS = {0};
如果我们试着把它放在课堂上,我们可以说:
class CL{
public:
struct G { int a; } GS = {0}; //error
};
我们有一个错误:
error C2059: syntax error : '{'
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
确定。一些变化。
class CL{
public:
struct G { int a; } GS;
CL() { GS.a = 0; }
};
工作正常。但在我的情况下,我有很多包含很多字段的结构。我不想在生成的代码中进行很多更改。 static const
怎么样?
class CL{
public:
static const struct G { int a; } GS; //ok
static const struct GT { int a; } GST = {0}; //error
};
也许我可以将所有结构都设为static const
结构并初始化它们?我怎么能解决我的问题?
答案 0 :(得分:0)
您可以将静态成员结构的初始化放在.cpp文件中,例如:
// cl.h
class CL{
public:
static const struct G { int a; } GS;
};
// cl.cpp
const CL::G CL::GS = {0};
答案 1 :(得分:0)
也许这个解决方案对你来说是可以接受的
// your header
template<typename T> T Create();
#define DECLARE_CREATE(STRUCT_TYPE, INITIALIZER)\
template<> STRUCT_TYPE Create<STRUCT_TYPE>()\
{\
STRUCT_TYPE GS = INITIALIZER;\
return GS;\
}\
// generated C-code
struct G { int a; };
// replace G GS = {0};
DECLARE_CREATE(G, {0});
int _tmain(int argc, _TCHAR* argv[])
{
G g = Create<G>(); // use initialized structure
return 0;
}
答案 2 :(得分:-1)
为什么不为结构定义构造函数来初始化它。
class CL
{
public:
CL() {};
~CL() {};
struct G
{
int a;
G() { memset(this, 0, sizeof(G)); }
};
G GS;
};