繁体   English   中英

#define 模板类型似乎不起作用

[英]#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.
  1. 为什么会这样? 据我所知,宏必须替换为模板化结构,然后声明然后定义。

  2. 如果我只是遗漏了一些东西并且有 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM