【问题标题】:Calculate some values using template size_t param [duplicate]使用模板 size_t 参数计算一些值
【发布时间】:2013-07-22 02:18:09
【问题描述】:

使用模板参数计算某些值的 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
    };
        ....
};

还是其他?

【问题讨论】:

  • 在 C++ 中,与大多数其他语言一样,没有“一种正确的方法”。
  • 我同意你的观点,这两种方式都是正确的,但是我想知道这个主题的一些好的做法

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


【解决方案1】:

enum hack 是提供编译时计算的旧方法。在类中初始化部分编译器不支持时使用,所以static const不能使用。如今,它已在所有现代编译器中固定。 所以首选的方式是使用static const

查看this answer了解更多信息。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多