我有一个类,它接受两个模板参数:
template< typename T, size_t Len >
struct A {
size_t GetLen() const {
return Len;
}
T mArr[Len];
};
typedef A< int, 10 > IntArrOfTenLen;
typedef A< int, 5 > IntArrOfTenFive;到目前一切尚好。现在,我想要编写一个函数,它可以使用这样的typedef'd变量来做一些事情。就像这样:
void f(_arr)
{
std::cout << _arr[_arr.GetLen() - 1];
}
void g()
{
IntArrOfTenLen arr;
IntArrOfTenFive arr2;
f(arr);
f(arr2);
}有可能吗?这类函数f()的签名应该是什么?
我试过以下几点:
template< typename A >
void f(A _arr) {
std::cout << _arr[_arr.GetLen() - 1];
}这失败了,因为没有提供 Len ,但是提供Len将在某种程度上违背编写GetLen()的目的,不是吗?
发布于 2016-03-29 14:28:44
如果希望f获取任意类型和长度的A,请将其设置为模板函数:
template <typename T, size_t Len>
void f(const A<T,Len>& arr) {
//...
}您不需要向T和Len提供此模板;它们将从参数中推断出来:
f(arr) //f<int, 10>
f(arr2) //f<int, 5>当然,与其重新发明轮子,不如在C++11中使用C++11,而不是编写自己的。
https://stackoverflow.com/questions/36287169
复制相似问题