C++库研究笔记——#if #elif 的错误使用

在了跟头,重新改设计了。。。。

无论is_ar为多少,始终输出 “not”

 

[cpp][/cpp] view plaincopy

  1. template<typename T, int is_ar= 1>//ant::is_arithmetic<T>::value >
  2. class Test
  3. {
  4. public:
  5.     void test()
  6.     {
  7. #if  is_ar
  8.     cout<<“is\n”;
  9. #elif !is_ar
  10.     cout<<“not\n”;
  11. #endif
  12.     cout<<“is_arr=”<<is_ar<<endl;
  13.     }
  14. };

为什么?

可能原因:

#elif 是预处理过程中解析的,不做表达狮的估值

 

不过要实现倒可以这样写(但麻烦多了):

 

[cpp][/cpp] view plaincopy

  1. template<typename T, int is_ar=ant::is_arithmetic<T>::value >
  2. class Test
  3. {
  4. public:
  5.     void test()
  6.     {
  7.     cout<<“not\n”;
  8.     }
  9. };

 

[cpp][/cpp] view plaincopy

  1. template<typename T>
  2. class Test<T, 1>
  3. {
  4. public:
  5.     void test()
  6.     {
  7.     cout<<“is\n”;
  8.     }
  9. };

标签