如何编写一个接受typename的宏?

时间:2017-02-22 19:47:11

标签: c++

以下代码 -

#define test_macro (some_typename) some_typename func (some_typename x) {return x;} 
test_macro (int)

无法使用g ++ 4.4.7编译,产生以下错误 -

constructor, destructor, or type conversion before 'some_typename'
unqualified-id before 'int'
')' before 'int'

我哪里错了?

1 个答案:

答案 0 :(得分:8)

宏不了解类型名称或任何其他语言功能,因为它们是预处理器的一部分。您的代码唯一的问题是格式化,即一些额外的空格:

#define test_macro(some_typename) some_typename func (some_typename x) {return x;}
test_macro(int)

另外,当您需要将typename作为参数时,请考虑模板 - 他们擅长:)