如何获取整数模板参数的值?

时间:2012-09-07 08:53:05

标签: c++ templates

标题可能令人困惑,但我们可以说我有一个模板:

template <typename T, size_t offset>
struct offsetedIdxArray
{
//...
}

在我创建实例后:

static const size_t offset(1701);
offsetedIdxArray<zmq::socket_t, offset> oia;

有没有办法从oia获得偏移量变量。我知道我可以使用偏移但是从代码风格的角度来看,如果可能的话,我更愿意从oia获取它。

编辑:我正在寻找一种在struct ...中没有辅助变量的情况下获得偏移的方法。

2 个答案:

答案 0 :(得分:5)

如果要从offsetedIdxArray<T,N>对象获取信息而不向类模板添加任何成员,可以使用模板函数:

#include <iostream>
#include <cstddef>

template <typename T, size_t offset>
struct offsetedIdxArray
{
};

template <typename T, size_t offset>
size_t getOffset(const offsetedIdxArray<T, offset>&) {
  return offset;
}

int main()
{
   offsetedIdxArray<int,5> oia;
   std::cout << getOffset(oia) << "\n";

}

否则,您可以按照其他帖子的建议添加静态常量或枚举数据成员。

答案 1 :(得分:3)

template <typename T, size_t offset>
struct offsetedIdxArray
{
   static const size_t off = offset;
//...
};

并获取变量off