是否有一种方法可以基于一系列值而不是仅一个值来进行模板特化?我知道以下代码不是有效的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
};

最佳答案

试试std::conditional:

#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/

10-11 17:07