【问题标题】:Specify constant value from template parameters从模板参数中指定常量值
【发布时间】:2013-08-14 21:04:07
【问题描述】:

我有一个带有模板参数的类,它是一个无符号整数。在实现过程中,我不得不大量使用下面的表达式(SIZE是模板参数):

(SIZE + sizeof(unsigned int) - 1) / sizeof(unsigned int)

将这个值放入编译时间常数以避免每次我想使用它时都写出整个表达式的最佳方法是什么?

p.s.:如果可能的话,我想使用 C++03。

【问题讨论】:

  • AppropriateName<SIZE>::value?如果在多个不同的地方使用它,那将是最好的。
  • static const size_t value = (...)?

标签: c++ templates


【解决方案1】:

你可以这样做:

template <unsigned SIZE>
class C
{
public:
    static const unsigned NumWords=(SIZE + sizeof(unsigned int) - 1) / 
                                   sizeof(unsigned int);
};

根据您的编译器,该常量应该在编译时可用:

int array[C<24>::NumWords];

C++11 为这类事情提供了constexpr,但您将答案限制在 C++03。

【讨论】:

  • "根据您的编译器,常量应该在编译时可用" static const 的问题是旧的编译器没有在类中实现 初始化。但是,正如我所指出的,旧编译器。任何现代编译器都实现了这一点,并且不需要 enum-hack(解决问题的常用方法)。
猜你喜欢
  • 2012-01-25
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
相关资源
最近更新 更多