是否可以选择性地编译代码的某些部分中的模板,还是仅限于预处理器?例如,如果我想删除的代码段与预处理程序,我知道我可以做:有选择地编译宏代码之外的代码
#if 0
static const char[] hello_world = "hello, world";
#endif
反正有做模板一样吗?
以防万一我问错了问题,这是我正在尝试做的。我想在启动应用程序时加载一些代码。通常,我只是使用一个构造函数来完成我想要的任何操作并创建一个静态变量。但是我希望这只发生在调试版本中,并且代码不会在发布版本中运行。我用这个宏创建的代码是用宏创建的,所以我似乎无法在宏中放置“#if 0”并使其正确扩展。
有没有办法在C++中做到这一点?
编辑:这里是我目前使用的宏代码的一个例子。
#define unittest(NAME) \
struct unittest_ ## NAME : \
public unittest::unittest_template<unittest_ ## NAME> \
{ \
unittest_ ## NAME() : \
unittest::unittest_template<unittest_ ## NAME>(#NAME) {} \
void run_test(); \
}; \
static unittest_ ## NAME NAME ## _unittest; \
void unittest_ ## NAME::run_test()
该代码是用来做:
unittest(addTest)
{
assert_(5, 5); // there's an assert statement in the code
}
我喜欢它的外观语法,但我不明白的方式来摆脱使用宏功能的机构。我尝试使用一个开始/结束宏,并得到:
#ifdef UNITTEST
# define unittest_begin(NAME) // previous code
# define unittest_end() // nothing needed
#else
# define unittest_begin(NAME) #if 0
# define unittest_end() #endif
#endif
这似乎并不奏效。
EDIT2:原来的问题与它变成的东西完全不同。改变名字,希望它与实际问题更相关。
[有条件的编译时包含/排除基于模板参数的代码的可能的重复?](http://stackoverflow.com/questions/5659064/conditional-compile-time-inclusion-exclusion-of-基于代码的模板参数) – Xeo 2011-06-05 00:41:25
这是重复的,但可悲的是似乎没有解决方案。 :( – Xeo 2011-06-05 00:42:57
现在还不清楚你想要启用或禁用什么,你展示了一个全局变量的例子,但是你的描述涉及到启用或禁用代码,并且涉及到宏,你可以提供一个“不能放” #if 0'你有问题吗? – 2011-06-05 01:04:58