最近,我注意到模板特化存在以下问题。

请注意,如果我们对f具有以下专长,并且模板参数名称可以是很长的类型,可能是从其他模板派生的。

template <class T> void f(T t) {}

template <>
void f<VeryLongType>(VeryLongType t)
{
    using T = VeryLongType;
    // ...
}

请注意,此非常长的类型名称重复了3次。同样,如果f返回此类型的值,则将引入另一个重复项(auto 将是一种解决方法)。

我想知道是否存在一些简化的语法,因此不需要重复吗?

可能如下所示:
template <>
void f<T = VeryLongType>(T t)
{
   // ...
}

最佳答案

您实际上不需要显式指定特化类型,例如:

template <>
void f(VeryLongType t)
{
    using T = VeryLongType;
    // ...
}

很好如果decltype(t)真的很长,则可以使用VeryLongType缩短类型别名。
using T = decltype(t); // makes it more generic too

关于c++模板特化参数重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50418093/

10-12 21:30