C++ 部分模板模板特化
C++ partial template template specialization
我想将部分模板特化传递给模板模板参数,但出现错误。我不确定为什么这不起作用。
template<template<typename, int> class V, typename T, int N, int... Indexes>
class Swizzle
{
// ...
};
template<typename T, int N>
struct Vector;
template<typename T>
struct Vector<T, 3>
{
// ...
union
{
// ...
Swizzle<Vector, T, 3, 0, 0, 0> xxx;
};
};
错误:
'Vector': invalid template argument for template parameter
'V', expected a class template 'Swizzle': use of class template
requires template argument list
问题仅出现在 MSVC
在 class 模板 Vector
中,Vector
指的是模板实例的类型和模板本身。
template<class X, int M>
using Self = Vector<X,M>;
// ...
union
{
// ...
Swizzle<Self, T, 3, 0, 0, 0> xxx;
};
我怀疑 MSVC 在这里是错误的,但不确定。
在 class 和 class name injection 中,Vector
可能指的是模板实例的类型和模板本身。
In the following cases, the injected-class-name is treated as a template-name of the class template itself:
[..]
- it is used as a template argument that corresponds to a template template parameter
所以这里的Msvc是错误的
可能的解决方法:
Swizzle<::Vector, T, 3, 0, 0, 0> xxx;
我想将部分模板特化传递给模板模板参数,但出现错误。我不确定为什么这不起作用。
template<template<typename, int> class V, typename T, int N, int... Indexes>
class Swizzle
{
// ...
};
template<typename T, int N>
struct Vector;
template<typename T>
struct Vector<T, 3>
{
// ...
union
{
// ...
Swizzle<Vector, T, 3, 0, 0, 0> xxx;
};
};
错误:
'Vector': invalid template argument for template parameter 'V', expected a class template 'Swizzle': use of class template requires template argument list
问题仅出现在 MSVC
在 class 模板 Vector
中,Vector
指的是模板实例的类型和模板本身。
template<class X, int M>
using Self = Vector<X,M>;
// ...
union
{
// ...
Swizzle<Self, T, 3, 0, 0, 0> xxx;
};
我怀疑 MSVC 在这里是错误的,但不确定。
在 class 和 class name injection 中,Vector
可能指的是模板实例的类型和模板本身。
In the following cases, the injected-class-name is treated as a template-name of the class template itself:
[..]
- it is used as a template argument that corresponds to a template template parameter
所以这里的Msvc是错误的
可能的解决方法:
Swizzle<::Vector, T, 3, 0, 0, 0> xxx;