【发布时间】:2012-03-01 23:57:56
【问题描述】:
这最初是作为c++ macros with memory?的答案发布的
但不知何故,我无法编译它。我可能在这里遗漏了一些东西。 (我有一种感觉,这是C++可以做到的)
main.cpp
#include <iostream>
using namespace std;
const char * hello = "hello";
const char * world = "world";
#define VAR
#define MEMORIZE world
#include "memorize.h"
#define MEMORIZE hello
#include "memorize.h"
int main() {
cout << VAR << endl;
return 0;
}
memorize.h
#undef VAR
#ifndef MEMORIZE
# error "No Argument to memorize.h"
#endif
#define VAR MEMORIZE
#undef MEMORIZE
我得到的编译错误是这样的:
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
error: use of undeclared identifier 'MEMORIZE'
cout << VAR << endl;
^
note: instantiated from:
#define VAR MEMORIZE
^
1 error generated.
make[2]: *** [CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2
我真的想让这个记忆的东西在预处理阶段工作。有人可以帮忙吗?我认为1.49 中的BOOST_PP_COUNTER 也使用了这种技术,但我不知道如何。
【问题讨论】:
-
我希望这是为了某种自虐娱乐而不是生产代码。 :-D
-
好吧,目前它没有编译......即使我想把它用于更广泛的用途,我也不能:P
标签: c++ boost c-preprocessor