模板转换运算符正在返回对数组的引用
Template conversion operator returing reference to array
我读到了这个问题和其他一些东西:在某些情况下typedef是绝对必要的吗??
我写了这个代码:
const int arrayOfInt[10] = {0};
template<typename T, int N> using X = const T (&)[N];
struct foo
{
template<typename T, int N> operator X<int,10> () { return arrayOfInt; }
};
void bar(const int (&) [10]) {}
int main()
{
bar(foo());
return 0;
}
c++11的using
特性对我不起作用,而且我也无法思考如何在这种情况下typedef
返回类型,因为我的类foo
本身不是模板。我需要看到使用using
关键字和typedef
两者的解决方案。非常感谢SO的人民:)
由于X
是一个别名模板,因此需要显式提供模板参数;它们不会从周围的范围被捕获:
struct foo
{
template<typename T, int N>
operator X<T,N>() { return arrayOfInt; }
// ^^^^^
};
使用typedef
不能做到这一点,因为没有typedef模板这样的东西。
template<typename T, int N> operator X<int,10> () { return arrayOfInt; }
模板自变量T和N永远不会被使用,因此永远不会被推导。
固定在Coliru上直播
const int arrayOfInt[10]{0};
template<typename T, int N> using X = T const (&)[N];
struct foo {
template<typename T, int N> operator X<T,N> () const { return arrayOfInt; }
};
void bar(const int (&) [10]) {}
int main()
{
foo f;
X<int, 10> v = f;
bar(foo());
}
相关文章:
- 通过指针与数组引用扩展数组索引序列
- 将链表的内容放在数组引用中
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C 在将数组引用分配给struct时麻烦
- Typedef数组引用
- 通过强制转换创建子数组引用
- 将数组引用 'T(&)[n]' 引用到 'std::array<T, n>' 的内容
- constexpr 数组引用参数
- 寻找有关函数定义和原型中数组引用的说明
- Initializer_list作为非模板上下文中数组引用参数的参数
- 如何使用一个动态创建的一维数组的二维数组引用仅与标准库?
- 如何返回具有大小的POD数组引用
- 在C++中返回数组引用的语法
- 是否可以声明转换函数返回数组引用而不使用typedef
- 自定义到数组引用的转换
- 类数组引用的NullReferenceException
- 数组指针与数组引用之间的差异
- 在c++中传递数组引用
- 使用特征矩阵作为特征数组引用的参数
- 如何从函数传递数组引用