基于 class 的测试模板,带有必须变化的 const 模板参数
Testing template based class with const template parameter which has to be varied
我正在开发一个基于模板的库来支持定点整数,我想出了这个 class 现在我必须针对 INT_BITS
和 FRAC_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;
};
我尝试了很多提到的技巧here , here and here。我尝试使用 const int
和 const_cast
的 std::vector
但似乎没有任何效果。
我想知道你如何测试模板参数是 const 的大型测试值的库?
您可以使用模板元编程模拟 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" 在网络上找到更多信息。
我正在开发一个基于模板的库来支持定点整数,我想出了这个 class 现在我必须针对 INT_BITS
和 FRAC_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;
};
我尝试了很多提到的技巧here , here and here。我尝试使用 const int
和 const_cast
的 std::vector
但似乎没有任何效果。
我想知道你如何测试模板参数是 const 的大型测试值的库?
您可以使用模板元编程模拟 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" 在网络上找到更多信息。