Lin*_*Lin 5 c++ templates c++11
最近我注意到模板特化的以下问题.
请注意,如果我们具有以下特化f,则模板参数名称可以是非常长的类型,可能来自其他模板.
template <class T> void f(T t) {}
template <>
void f<VeryLongType>(VeryLongType t)
{
using T = VeryLongType;
// ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,这个非常长的类型名称重复3次.此外,如果f返回此类型的值,则将引入另一个重复(auto
将是一种解决方法).
我想知道是否存在一些简化的语法,以便不需要重复?
可能如下:
template <>
void f<T = VeryLongType>(T t)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
您实际上不需要显式指定特化类型,例如:
template <>
void f(VeryLongType t)
{
using T = VeryLongType;
// ...
}
Run Code Online (Sandbox Code Playgroud)
很好.decltype(t)如果VeryLongType真的很长,可以缩短类型别名...
using T = decltype(t); // makes it more generic too
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |