![](/img/trans.png)
[英]typedef in template c++ class doen't work when define out side of class?
[英]#define template types doen't seem to work
假设以下代码:
#define __INIT_TYPE(type) { template<typename type>struct S{ };}
__INIT_TYPE(int);
int main(){
}
第二行产生以下错误
Function definition for '\__INIT_TYPE' not found. Expected a declaration.
为什么会这样? 据我所知,宏必须替换为模板化结构,然后声明然后定义。
如果我只是遗漏了一些东西并且有 q.1 的解决方案,那么在程序中使用这样的宏嵌套类型是否被认为是一种不好的做法?
在 C++ 中,尽可能避免宏,它们大多是不好的做法。 它们是类型不安全的,通常不会使代码更具可读性(对其他人而言)。 如果可以,请坚持使用标准 C++。
在你的例子中,__INIT_TYPE 没有初始化任何东西,只是创建了 S 的模板实例。
如果你想要一个 S 的初始化实例,只需制作一个 function 模板来创建你的结构。
template<typename type_t>
struct S
{
};
template<typename>
auto make_S()
{
return S<typename type_t>{};
}
int main()
{
auto s = make_S<int>();
}
您将宏定义为 function,主体在大括号中,例如 function 主体 w/oa function 名称:
#define __INIT_TYPE(type) { template<typename type>struct S{ };}
函数外不允许使用大括号。 你可能想要
#define __INIT_TYPE(type) template<typename type>struct S{ };
建议你看看What are the rules about using an underscore in a C++ identifier? 以避免进一步的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.