是否有一种方法可以基于一系列值而不是仅一个值来进行模板特化?我知道以下代码不是有效的C++代码,但它显示了我想要执行的操作。我正在为8位计算机编写代码,因此使用整数和字符的速度有所不同。
template<unsigned SIZE>
class circular_buffer {
unsigned char buffer[SIZE];
unsigned int head; // index
unsigned int tail; // index
};
template<unsigned SIZE <= 256>
class circular_buffer {
unsigned char buffer[SIZE];
unsigned char head; // index
unsigned char tail; // index
};
最佳答案
#include <type_traits>
template<unsigned SIZE>
class circular_buffer {
typedef typename
std::conditional< SIZE < 256,
unsigned char,
unsigned int
>::type
index_type;
unsigned char buffer[SIZE];
index_type head;
index_type tail;
};
如果您的编译器尚不支持C++ 11的这一部分,则boost libraries.中有等效功能
再说一次,很容易自己动手(贷记给KerrekSB):
template <bool, typename T, typename F>
struct conditional {
typedef T type;
};
template <typename T, typename F> // partial specialization on first argument
struct conditional<false, T, F> {
typedef F type;
};
关于c++ - 如何专门针对一系列整数值的C++模板?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11019232/