使用const模板参数测试基于模板的类,必须进行更改

时间:2015-05-29 03:38:42

标签: c++ templates testing const const-cast

我正在开发一个基于模板的库以支持定点整数,我想出了这个类,现在我必须测试INT_BITSFRAC_BITS的各种值。但由于它们是const(并且由于某种原因它们必须是这样),我无法在循环中初始化具有变量INT_BITS的对象,因此它正在测试此库非常困难。 />     

template<int INT_BITS, int FRAC_BITS>
struct fp_int
{
     public:
            static const int BIT_LENGTH = INT_BITS + FRAC_BITS;
            static const int FRAC_BITS_LENGTH = FRAC_BITS;
     private:
            // Value of the Fixed Point Integer 
            ValueType stored_val;
};

我尝试了很多提及hereherehere的技巧。我尝试使用std::vector const intconst_cast,但似乎没有任何效果。

我想知道你如何测试这样的库,其中模板参数是一个大的测试值的const?

1 个答案:

答案 0 :(得分:2)

您可以使用模板元编程来模拟for循环。

#include <iostream>

typedef int ValueType;

template<int INT_BITS, int FRAC_BITS>
struct fp_int
{
   public:
      static const int BIT_LENGTH = INT_BITS + FRAC_BITS;
      static const int FRAC_BITS_LENGTH = FRAC_BITS;
   private:
      // Value of the Fixed Point Integer 
      ValueType stored_val = 0;
};

template <unsigned int N> struct ForLoop
{
   static void testFpInt()
   {
      std::cout << "Testing fp_int<" << N << ", 2>\n";
      fp_int<N, 2> x;
      // Use x

      // Call the next level
      ForLoop<N-1>::testFpInt();
   }
};

// Terminating struct.
template <> struct ForLoop<0>
{
   static void testFpInt()
   {
      std::cout << "Testing fp_int<" << 0 << ", 2>\n";
      fp_int<0, 2> x;
      // Use x
   }
};

int main()
{
   ForLoop<10>::testFpInt();
   return 0;
}

输出

Testing fp_int<10, 2>
Testing fp_int<9, 2>
Testing fp_int<8, 2>
Testing fp_int<7, 2>
Testing fp_int<6, 2>
Testing fp_int<5, 2>
Testing fp_int<4, 2>
Testing fp_int<3, 2>
Testing fp_int<2, 2>
Testing fp_int<1, 2>
Testing fp_int<0, 2>

您可以通过搜索“for loop using template metaprogramming”在网上找到更多信息。