使用模板参数计算某些值的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
};
....
};
或其他方式?
答案 0 :(得分:2)
enum hack 是提供编译时计算的旧方法。当某些编译器不支持类初始化时使用它,因此无法使用static const
。如今它已在所有现代编译器中得到修复。
所以首选的方法是使用static const
。
查看this answer了解详情。
答案 1 :(得分:1)
“enum hack”适用于那些没有正确实现static const
的旧编译器(主要是预标准版)。
除非您别无选择,只能为这些古老工具开发,static const
版本显然更为可取。