使用模板size_t param计算一些值

时间:2013-07-23 06:30:58

标签: c++ templates template-meta-programming

使用模板参数计算某些值的C ++方法是什么?

template<typename T, size_t SIZE>
class ThreadSafeArray
{
private:
    static const size_t BLOCK_SIZE = SIZE > 32 ? 16 : 4;
    static const size_t MUTEX_COUNT = SIZE / BLOCK_SIZE + 1;
    ...
};

或者

template<typename T, size_t SIZE>
class ThreadSafeArray
{
private:
    enum
    {
        BLOCK_SIZE = SIZE > 32 ? 16 : 4,
        MUTEX_COUNT = SIZE / BLOCK_SIZE + 1
    };
        ....
};

或其他方式?

2 个答案:

答案 0 :(得分:2)

enum hack 是提供编译时计算的旧方法。当某些编译器不支持类初始化时使用它,因此无法使用static const。如今它已在所有现代编译器中得到修复。 所以首选的方法是使用static const

查看this answer了解详情。

答案 1 :(得分:1)

“enum hack”适用于那些没有正确实现static const的旧编译器(主要是预标准版)。

除非您别无选择,只能为这些古老工具开发,static const版本显然更为可取。