我正在阅读这个问题以及其他一些内容:Are there cases where a typedef is absolutely necessary??
我写了这段代码:
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
功能对我不起作用,在我的课程{{1}中,我也无法在这种情况下考虑如何typedef
返回类型}不是模板本身。我需要使用foo
关键字和using
来查看解决方案。非常感谢SO的人们:)
答案 0 :(得分:2)
由于X
是别名模板,因此您需要明确提供模板参数;他们不会被周围的范围捕获:
struct foo
{
template<typename T, int N>
operator X<T,N>() { return arrayOfInt; }
// ^^^^^
};
您无法使用typedef
执行此操作,因为没有typedef模板。
答案 1 :(得分:1)
template<typename T, int N> operator X<int,10> () { return arrayOfInt; }
模板参数T和N从不使用,因此永远不会推导出来。
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());
}