0

嗨,我有一个模板类的静态成员,我想为一组模板类定义,即:

template <typename T> 
class FooT
{
private:
 static int ms_id;
};

template <typename T> 
class Foo {};

template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10;

可悲的是,这在 gcc 4.1.1 下引发了以下错误

D:\X\Foo.h(98) : 错误:模板参数 1 无效

在线上:template<> template<typename T> int FooT< template Foo<T> >::ms_id = 10;

我做错了什么是首先允许的一般概念?

4

3 回答 3

3

您可以通过部分专门化“初始化模板”来做到这一点:

template <typename T> 
class FooT
{
private:
 static int ms_id;
};

template <typename T> 
class Foo {};

template <typename T>
class GetValue {
  static const int v = 0;
};

template <typename T>
class GetValue< Foo<T> > {
  static const int v = 10;
};

template<typename T> int FooT< T >::ms_id = GetValue<T>::v;
于 2009-10-16T11:46:12.403 回答
2

当然,您不能将模板类作为模板放在模板实例中。您需要放置一个“具体”类。

例如,使用 int:

template <>
int FooT< template Foo< int > >::ms_id = 10; 

或者

template<>
int FooT< MyClass >::ms_id = 10; 
于 2009-10-16T11:30:23.667 回答
1
template <typename T> class Foo{};

struct MS_ID_TEN
{
protected:
    static int ms_id;
}
int MS_ID_TEN::ms_id = 10; 

template <typename T> struct MS_ID {}
template <typename T> struct MS_ID< Foo<T> > : MS_ID_TEN {};

template <typename T> 
class FooT : public MS_ID<T>
{
};
于 2009-10-16T11:52:06.713 回答