C++库研究笔记——#if #elif 的错误使用
在了跟头,重新改设计了。。。。
无论is_ar为多少,始终输出 "not"
[cpp]
template<typename T, int is_ar= 1>//ant::is_arithmetic<T>::value >
class Test
{
public:
void test()
{
#if is_ar
cout<<"is\n";
#elif !is_ar
cout<<"not\n";
#endif
cout<<"is_arr="<<is_ar<<endl;
}
};
为什么?
可能原因:
#elif 是预处理过程中解析的,不做表达狮的估值
不过要实现倒可以这样写(但麻烦多了):
[cpp]
template<typename T, int is_ar=ant::is_arithmetic<T>::value >
class Test
{
public:
void test()
{
cout<<"not\n";
}
};
[cpp]
template<typename T>
class Test<T, 1>
{
public:
void test()
{
cout<<"is\n";
}
};
补充:软件开发 , C++ ,