是否可以从模板参数中提取数组大小?

ext*_*spy 7 c++ templates template-meta-programming c++11

如果这是重复我道歉.我环顾四周,发现了类似的问题,但没有完全像这样.

如果我像这样实例化模板......

MyClass<int[10]> c;
Run Code Online (Sandbox Code Playgroud)

如何编写模板以访问类型和数组大小?我已经尝试了我能想到的一切,但我无法得到它.

我受到std :: function模板的启发,它允许你使用与函数原型相似的语法,比如......

std::function<int(MyClass&)> myfunc;
Run Code Online (Sandbox Code Playgroud)

所以我认为对阵列及其大小有类似的东西会很好.我可以使用任何最新的c ++特性(c ++ 11/14).

Pra*_*han 17

您可以添加如下所示的部分特化:

template <typename T, ptrdiff_t N>
class MyClass<T[N]>
{
};
Run Code Online (Sandbox Code Playgroud)

这是一个演示.

  • Downvoter,这个片段的问题是什么? (3认同)
  • @Pradhan:`int`而不是'size_t`可能*看起来像一个可怜的风格,对于一个可怜的灵魂来说,他很不确定他(它不可避免地是他)不想陈述或支持他的好印象.也就是说,至少有一些旧版本的g ++有一个错误,它有效地要求你使用`size_t`.我会使用定义为`ptrdiff_t`的大小类型. (2认同)