模板专业化的模板参数?

发布于 2024-08-07 11:54:11 字数 482 浏览 8 评论 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>>;模板<类型名称 T> int FooT<模板 Foo>::ms_id = 10;

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

Hi I've got a static member of a templated class that I want defined for a sub group of classes that are templated ie:

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;

Sadly this throws the following error under gcc 4.1.1

D:\X\Foo.h(98) : error: template argument 1 is invalid

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

What am I doing wrong is the general concept allowed in the first place?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌伤ぢ 2024-08-14 11:54:11

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

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;

You can do this by partially specializing an "initializer template":

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;
つ可否回来 2024-08-14 11:54:11

当然,您无法将模板类作为模板实例中的增强。您需要放置一个“具体”类。

例如,使用 int:

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

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

Surely you are not able to put template class as augument in a template instanciation. You need to put a "concrete" class.

For instance , with int:

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

or

template<>
int FooT< MyClass >::ms_id = 10; 
高冷爸爸 2024-08-14 11:54:11
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>
{
};
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>
{
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文