首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板函数上的模板函数

模板函数上的模板函数
EN

Stack Overflow用户
提问于 2016-03-29 14:25:08
回答 1查看 33关注 0票数 0

我有一个类,它接受两个模板参数:

代码语言:javascript
复制
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变量来做一些事情。就像这样:

代码语言:javascript
复制
void f(_arr)
{
    std::cout << _arr[_arr.GetLen() - 1];
}

void g()
{
    IntArrOfTenLen arr;
    IntArrOfTenFive arr2;
    f(arr);
    f(arr2);
}

有可能吗?这类函数f()的签名应该是什么?

我试过以下几点:

代码语言:javascript
复制
template< typename A >
void f(A _arr) {
    std::cout << _arr[_arr.GetLen() - 1];
}

这失败了,因为没有提供 Len ,但是提供Len将在某种程度上违背编写GetLen()的目的,不是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-29 14:28:44

如果希望f获取任意类型和长度的A,请将其设置为模板函数:

代码语言:javascript
复制
template <typename T, size_t Len>
void f(const A<T,Len>& arr) {
    //...
}

您不需要向TLen提供此模板;它们将从参数中推断出来:

代码语言:javascript
复制
f(arr)  //f<int, 10>
f(arr2) //f<int, 5>

当然,与其重新发明轮子,不如在C++11中使用C++11,而不是编写自己的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36287169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档