我正在使用VS2015 Update 3.以下代码在main()中的行上给出了intellisense错误,但代码编译并运行时没有错误。
#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>();
}
在主要的第一行,intellisense说“不允许不完整的类型”。
在第二行,intellisense给出了三个错误:“不允许不完整的类型”,“不允许类型名称”和“预期表达式”
这是编译器还是intellisense中的错误?
答案 0 :(得分:0)
您的代码存在一些问题。
尝试(1)将EntityManager
定义为
template<class... A, class... B>
class EntityManager<ComponentList<A...>, FilterList<B...>>
(因为FirstFilter
和SecondFilter
是类型名称,非template<class> class
参数)和(2)使用test()
的不同模板参数(A
冲突课程A...
template<class C>
void test()
{
std::cout << typeid(C).name() << std::endl;
}
和(3)添加#include<typeinfo>
和(4)定义int main()
而不是void main()
。