如何将数组指针转换为模板函数的数组参数?

时间:2014-03-24 09:49:19

标签: c++ templates

我觉得标题很混乱,我会用一些代码来解释我的情况。

template<uint16_t Len>
void add(const int8_t (&i_array)[Len])
{
  // Do something
}

class Test
{
public:
int8_t* GetName()
{
  return name;
} 

private:
 int8_t name[10] = "myname";
}

int main()
{
 Test mytest;

 add(mytest.GetName()); // Compilation error
}

此代码无法编译。生成以下错误: &#34;错误#304:没有函数模板添加的实例匹配参数列表&#34;

似乎编译器无法确定GetName()是否返回大小为10的数组。是吗?

我怎么称呼&#34;添加&#34;用数组上的指针?

谢谢, 尼古拉斯

1 个答案:

答案 0 :(得分:2)

Test::GetName返回指针,而不是数组。您不能将其结果绑定到需要数组引用的函数。但是,您可以更改GetName的签名以使其返回数组(当然,通过引用):

int8_t (&GetName())[10] { return name; }

或者你可以使用强制转换,但这会破坏类型系统的目的。