c++ using nested template classes for carrying type information
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Where and why do I have to put the"template" and"typename" keywords?
当我试图在vs 2012中编译以下代码时,我在consumer类的typedef行中得到错误,从以下代码开始:
1 | error C2143: syntax error : missing ';' before '<' |
这是编译器的问题还是代码不再有效C++?(该项目是从中提取的,当然用于在旧版本的vs-和gcc-iirc上无问题地构建,但那是大约10年前的事了!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | struct TypeProvider { template<class T> struct Container { typedef vector<T> type; }; }; template<class Provider> class Consumer { typedef typename Provider::Container<int>::type intContainer; typedef typename Provider::Container<double>::type doubleContainer; }; |
有一个解决办法,但我只是想知道是否需要:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | struct TypeProvider { template<typename T> struct Container { typedef vector<T> type; }; }; template<template<class T> class Container, class Obj> struct Type { typedef typename Container<Obj>::type type; }; template<typename Provider> class TypeConsumer { typedef typename Type<Provider::Container, int>::type intContainer; typedef typename Type<Provider::Container, double>::type doubleContainer; }; |
您需要帮助编译器知道
1 2 3 4 5 6 | template<class Provider> class Consumer { typedef typename Provider:: template Container<int>::type intContainer; typedef typename Provider:: template Container<double>::type doubleContainer; }; |
这在这篇文章的公认答案中得到了很好的解释。