如何删除模板声明中的重复模板参数
how to remove duplicate template arguments in template declaration
为了简洁起见,我想在显式实例化中只命名一个模板参数一次,但我遇到了编译器错误。我正在尝试使用 Type alias, alias template
下的 cppreference 中描述的 C++ 语法。这是我的示例代码:
struct M {};
template< typename T1 >
struct S {};
template< typename T2, typename T3 >
struct N {};
// type alias used to hide a template parameter (from cppreference under 'Type alias, alias template')
//template< typename U1, typename U2 >
//using NN = N< U1, U2< U1 > >; // error: attempt at applying alias syntax: error C2947: expecting '>' to terminate template-argument-list, found '<'
int main()
{
N< M, S< M > > nn1; // OK: explicit instantiation with full declaration, but would like to not have to use M twice
// NN< M, S > nn2; // desired declaration, error: error C2947: expecting '>' to terminate template-argument-list, found '<'
return 0;
}
这里有什么问题?
typename U2
是类型名,不是模板。因此,U2< U1 >
没有意义。将其替换为模板模板参数:
template< typename U1, template<typename> class U2 >
using NN = N< U1, U2< U1 > >;
为了简洁起见,我想在显式实例化中只命名一个模板参数一次,但我遇到了编译器错误。我正在尝试使用 Type alias, alias template
下的 cppreference 中描述的 C++ 语法。这是我的示例代码:
struct M {};
template< typename T1 >
struct S {};
template< typename T2, typename T3 >
struct N {};
// type alias used to hide a template parameter (from cppreference under 'Type alias, alias template')
//template< typename U1, typename U2 >
//using NN = N< U1, U2< U1 > >; // error: attempt at applying alias syntax: error C2947: expecting '>' to terminate template-argument-list, found '<'
int main()
{
N< M, S< M > > nn1; // OK: explicit instantiation with full declaration, but would like to not have to use M twice
// NN< M, S > nn2; // desired declaration, error: error C2947: expecting '>' to terminate template-argument-list, found '<'
return 0;
}
这里有什么问题?
typename U2
是类型名,不是模板。因此,U2< U1 >
没有意义。将其替换为模板模板参数:
template< typename U1, template<typename> class U2 >
using NN = N< U1, U2< U1 > >;