繁体   English   中英

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”:模板参数“V”的模板参数无效,需要类模板“Swizzle”:使用类模板需要模板参数列表

问题仅出现在MSVC 上

在类模板VectorVector既指模板实例的类型,也指模板本身。

这应该编译

template<class X, int M>
using Self = Vector<X,M>;
// ...

union
{
    // ...
    Swizzle<Self, T, 3, 0, 0, 0> xxx;
};

我怀疑 MSVC 在这里是错误的,但我不确定。

类名注入的类中, Vector可能会同时引用模板实例的类型和模板本身。

在以下情况下,注入的类名被视为类模板本身的模板名:

[..]

  • 它用作对应于模板模板参数的模板参数

所以 Msvc 在这里是不正确的。

可能的解决方法:

Swizzle<::Vector, T, 3, 0, 0, 0> xxx;

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM