模板化typedef上的Template函数
Template function over a templated typedef
我有一个类,它接受两个模板参数:
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()的目的,不是吗?
如果您希望f
采用任意类型和长度的A
s,请将其作为模板函数:
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中使用std::array
,而不是重新设计轮子,而不是自己编写。
相关文章:
- 在template中使用std::variant的template函数
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 模板函数参数到模板函数的"candidate template ignored: could not match ..."
- 为什么在template函数广播中把两个extensor表达式加在一起不正确
- 具有模板成员函数的 C++ 模板专用化<template>
- 为什么在auto和template函数的情况下,类型都没有推导为"const"类型
- 如何在varadic/template类构造函数中正确使用std::forward
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- 如何使函数像运算符<template>()形式<functional>
- 为什么std::vector::template在没有调用任何复制构造函数的情况下调用析构函数
- 带有Template参数的Template函数
- 使用template函数可以安全地在多个类类型之间进行强制转换
- 模板化typedef上的Template函数
- 使用for_each()AND lambda函数打印C样式数组的Template函数
- 传递给template函数的两个lambda使得参数的类型推导不明确——为什么
- Template函数不是命名空间的成员
- c++中的template函数希望返回另一个容器
- 用template函数设计层次类
- 为某些模板参数设置public/private on template函数
- 如何在template类中显式实例化template函数