假设下面的代码:
#define __INIT_TYPE(type) { template<typename type>struct S{ };}
__INIT_TYPE(int);
int main(){
}
第二行产生以下错误
Function definition for '\__INIT_TYPE' not found. Expected a declaration.
1.为什么会发生这种情况?据我所知,宏必须被模板化的结构体所取代,而模板化的结构体将被声明并定义。
1.如果我只是遗漏了一些东西,而q.1有一个解决方案,那么在程序中用这样的宏嵌套类型是否被认为是一个坏习惯?
2条答案
按热度按时间hxzsmxv21#
在C中尽可能避免使用宏,它们大多是不好的做法。它们是类型不安全的,通常不会使代码更具可读性(对其他人来说)。如果可以的话,坚持使用标准的C。
在您的例子中,__INIT_TYPE没有初始化任何东西,只是创建了S的一个模板示例。
如果你想要一个初始化的S示例,只需创建一个函数模板,用来创建你的结构体。
2wnc66cl2#
我们将宏定义为函数,函数体用大括号括起来,就像没有函数名的函数体一样:
函数外部不允许使用大括号。您可能需要
建议您查看What are the rules about using an underscore in a C++ identifier?以避免更多错误。