我在一个函数中有一个宏来实例化一个给定类型的变量(并做一些其他不相关的事情)。
基本上TryRotateAsyc
扩展为MACRO(foo, f)
但如果foo f;
说foo
,那么由于额外的逗号,扩展会失败。
我通过编写std::map<int, int>
后跟typedef std::map<int, int> bar;
来解决此问题。
我很担心我将MACRO(bar, b)
泄漏到程序源中,这可能会在将来导致我出现问题。
那么,typedef
持续多长时间?
答案 0 :(得分:7)
typedef
可用性的规则与变量的规则相同,因此在您的情况下,它将“#34;}&#34;只要功能体。
您可以通过编写
自行验证 {typedef std::map<std::string, std::string, iLT> location_map;}
并观察编译器错误:只要范围块存在,typedef
本身就超出了范围。
答案 1 :(得分:3)
typedef
一直持续到全局范围或命名空间范围内的翻译单元结束。
或放入其他范围内的范围结束。