Nik*_*s R 15 c++ compiler-errors c-preprocessor
我可以使用双冒号#define吗?我想在实现文件中保存一些写法,例如:
// foo.h
#define template template <class T>
#define foo:: foo<T>::
template class foo {
T& baz();
};
#include "foo.tpp"
#undef template
#undef foo::
// foo.tpp
template T& foo::baz() {
// do stuff.
}
Run Code Online (Sandbox Code Playgroud)
但我得到的语法错误我并不理解.(请参阅键盘上的示例):
第11行:错误:在宏名称后面缺少空格
第10行:错误:#undef指令结束时的额外标记
第4行:错误:'foo'不是
由于-Wfatal-errors而终止的模板编译.
Jam*_*lis 16
不可以.宏的名称必须是标识符; 它不能由其他字符组成,也不能包含多个令牌.
#define template是无效的,因为template它不是标识符,它是一个关键字.
#define foo:: foo<T>::在C90和C++ 98中有效:它定义了一个名为的宏foo被替换为:: foo<T>::(这不是你想要做的,但它是有效的).但是,这在C99和C++ 11中无效,因为在较新的语言版本中,类对象宏的名称与其替换列表(替换它的标记)之间必须有空格.
| 归档时间: |
|
| 查看次数: |
3543 次 |
| 最近记录: |