Has*_*dev 5 templates using c++11
我想为一个类型别名,以便在必要时可以给它一个模板参数.
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;
}
Run Code Online (Sandbox Code Playgroud)
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’
Run Code Online (Sandbox Code Playgroud)
默认模板参数不能与'using'一起使用吗?如果是这样,为什么不在行上说明默认参数?
Fil*_*efp 10
具有默认值模板参数的别名模板 是合法的,但你不能离开了<,并且>,当你以后使用所述别名.
template<class T = float>
using val = value<T, 2>;
val<> v; // legal, decltype(v) => value<float, 2>
val<int> w; // legal, decltype(w) => value<int, 2>
Run Code Online (Sandbox Code Playgroud)
14.5.7p1别名模板[temp.alias]甲模板声明,其中所述声明是一个别名声明(第7章)声明标识符是一个别名模板.别名模板是一系列类型的名称.别名模板的名称是模板名称.
上面说明模板别名引入的名称是模板名称,模板名称后面必须跟有模板参数列表.
14.2p1模板专业化的名称[temp.names]Run Code Online (Sandbox Code Playgroud)simple-template-id: template-name < template-argument-list_opt > template-name: identifier
注意:注意这两个<>在引用simple-template-id时是不可选的,并且模板名本身只是一个标识符,而不是一个类型.