可变参数模板参数可能存在 msvc/intellisense 个错误
Possible msvc/intellisense bug with variadic template arguments
我正在使用 VS2015 Update 3。以下代码在 main() 的行中给出了智能感知错误,但是代码编译并运行没有错误。
#include <iostream>
#include <tuple>
// Template parameter classes
template<class...> struct ComponentList {};
template<class...> struct Filter {};
template<class...> struct FilterList {};
template<typename ATuple, typename BTuple>
class EntityManager;
template<class... A, template<class> class... B>
class EntityManager<ComponentList<A...>, FilterList<B...>>
{
public:
template<class A>
void test()
{
std::cout << typeid(A).name() << std::endl;
}
// Create tuple for each filter inside filterlist
std::tuple<B...> tuples;
};
using MyComponents = ComponentList<int, double, float>;
using FirstFilter = Filter<int, double>;
using SecondFilter = Filter<float>;
using MyFilters = FilterList<FirstFilter, SecondFilter>;
void main()
{
EntityManager<MyComponents, MyFilters> em;
em.test<int>();
}
在 main 的第一行,intellisense 显示 'incomplete type is not allowed'。
在第二行,intellisense给出三个错误:'incomplete type is not allowed'、'type name is not allowed'和'expected an expression'
这是编译器或智能感知中的错误吗?
您的代码有一些问题。
尝试 (1) 将 EntityManager
定义为
template<class... A, class... B>
class EntityManager<ComponentList<A...>, FilterList<B...>>
(因为 FirstFilter
和 SecondFilter
是类型名称,非 template<class> class
参数)和 (2) 使用不同的模板参数 test()
(A
对于 class)
与 A...
冲突
template<class C>
void test()
{
std::cout << typeid(C).name() << std::endl;
}
和 (3) 添加 #include<typeinfo>
和 (4) 定义 int main()
而不是 void main()
.
我正在使用 VS2015 Update 3。以下代码在 main() 的行中给出了智能感知错误,但是代码编译并运行没有错误。
#include <iostream>
#include <tuple>
// Template parameter classes
template<class...> struct ComponentList {};
template<class...> struct Filter {};
template<class...> struct FilterList {};
template<typename ATuple, typename BTuple>
class EntityManager;
template<class... A, template<class> class... B>
class EntityManager<ComponentList<A...>, FilterList<B...>>
{
public:
template<class A>
void test()
{
std::cout << typeid(A).name() << std::endl;
}
// Create tuple for each filter inside filterlist
std::tuple<B...> tuples;
};
using MyComponents = ComponentList<int, double, float>;
using FirstFilter = Filter<int, double>;
using SecondFilter = Filter<float>;
using MyFilters = FilterList<FirstFilter, SecondFilter>;
void main()
{
EntityManager<MyComponents, MyFilters> em;
em.test<int>();
}
在 main 的第一行,intellisense 显示 'incomplete type is not allowed'。
在第二行,intellisense给出三个错误:'incomplete type is not allowed'、'type name is not allowed'和'expected an expression'
这是编译器或智能感知中的错误吗?
您的代码有一些问题。
尝试 (1) 将 EntityManager
定义为
template<class... A, class... B>
class EntityManager<ComponentList<A...>, FilterList<B...>>
(因为 FirstFilter
和 SecondFilter
是类型名称,非 template<class> class
参数)和 (2) 使用不同的模板参数 test()
(A
对于 class)
A...
冲突
template<class C>
void test()
{
std::cout << typeid(C).name() << std::endl;
}
和 (3) 添加 #include<typeinfo>
和 (4) 定义 int main()
而不是 void main()
.