Templates C++;11';使用';类型别名
我想给一个类型加上别名,以便在必要时给它一个模板参数Templates C++;11';使用';类型别名,templates,c++11,using,Templates,C++11,Using,我想给一个类型加上别名,以便在必要时给它一个模板参数 template<typename T, unsigned d> struct value { T a[d]; }; template<typename T=float> using val=value<T, 2>; int main() { val v; //should now be equal to val<float> v; val<int&g
template<typename T, unsigned d>
struct value
{
T a[d];
};
template<typename T=float>
using val=value<T, 2>;
int main()
{
val v; //should now be equal to val<float> v;
val<int> w; //should also be valid.
return 0;
}
模板
结构值
{
Tα[d];
};
模板
使用val=值;
int main()
{
val v;//现在应该等于val v;
val w;//也应该是有效的。
返回0;
}
由于某些原因,G++不批准:
test.cpp: In function ‘int main()’:
test.cpp:12:13: error: missing template arguments before ‘v’
val v; //should now be equal to val<float> v;
^
test.cpp:12:13: error: expected ‘;’ before ‘v’
test.cpp:在函数“int main()”中:
test.cpp:12:13:错误:“v”之前缺少模板参数
val v//现在应该等于val v;
^
test.cpp:12:13:错误:应为“;”在“v”之前
默认模板参数不能与“使用”一起使用吗?
如果是这样,为什么在指定默认参数的行上不这样说?您只能使用不带
的函数模板。对于类,模板参数的空列表是必需的:
val<> v; //should now be equal to val<float> v;
valv//现在应该等于val v;
简介
在别名模板中为模板参数设置默认值是合法的,但在以后使用该别名时,不能忽略
模板
使用val=值;
val v;//合法,decltype(v)=>值
val w;//合法,decltype(w)=>值
标准怎么说?()
14.5.7p1
别名模板[temp.Alias]
其中声明为别名声明的模板声明(第7条)将标识符声明为别名模板。别名模板是类型族的名称。别名模板的名称是模板名称
上面说明模板别名引入的名称是模板名称,模板名称后面必须跟有模板参数列表
14.2p1
模板专门化的名称[temp.Names]
简单模板id:
模板名称
模板名称:
标识符
注意:注意这两个
在引用简单模板id时不是可选的,模板名称本身只是一个标识符,而不是类型