当我尝试在 VS 2012 中编译以下代码时,我在 Consumer 类的 typedef 行开始出现错误:
error C2143: syntax error : missing ';' before '<'
这是编译器的问题还是代码不再有效的c++?(它提取的项目肯定用于在旧版本的 VS 和 gcc iirc 上毫无问题地构建 - 但那是大约 10 年前的事了!)
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;
};
有一个解决方法,但我只是想知道是否需要它:
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;
};