用于初始化模板类的静态数据成员的部分模板特化

发布于 2024-12-08 02:57:05 字数 472 浏览 0 评论 0原文

如何针对特定参数以不同方式初始化模板类的静态数据成员?

我知道模板与其他类型的类不同,并且只有项目中使用的内容才会被实例化。我可以为不同的参数列出许多不同的初始化并让编译器使用合适的吗?

例如,以下操作是否有效?如果无效,正确的方法是什么? :

template<class T>
class someClass
{
   static T someData;
   // other data, functions, etc...
};

template<class T>
T someClass::someData = T.getValue();

template<>
int someClass<int>::someData = 5;

template<>
double someClass<double>::someData = 5.0;

// etc...

How would one initialize static data members of a template class differently for particular parameters?

I understand that templates are different than other kinds of classes and only what is used in the project ever gets instantiated. Can I list a number of different initializations for different parameters and have the compiler use whichever is appropriate?

For example, does the following work, and if not what is the correct way to do this? :

template<class T>
class someClass
{
   static T someData;
   // other data, functions, etc...
};

template<class T>
T someClass::someData = T.getValue();

template<>
int someClass<int>::someData = 5;

template<>
double someClass<double>::someData = 5.0;

// etc...

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

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

发布评论

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

评论(1

孤蝉 2024-12-15 02:57:05

应该有效。您可能需要将它们放入 .c 文件而不是标头中。

int someClass<int>::someData = 5;
double someClass<double>::someData = 5.0;

这也是一个工作部分模板专业化,带有静态数据成员的初始化:

// .h
template <class T, bool O>
struct Foo {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template <class T>
struct Foo<T, true> {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template<class T, bool O>
short Foo<T, O>::id = 0;
template<class T>
short Foo<T, true>::id = 1;

//.cpp
int main(int argc, char *argv[])
{
    Foo<int, true> ft(0);
    Foo<int, false> ff(0);
    cout << ft.id << " " << ff.id << endl;
}

Should work. You may need to put these into the .c file instead of the header.

int someClass<int>::someData = 5;
double someClass<double>::someData = 5.0;

Here is also a working partial template specialization with initialization of static data members:

// .h
template <class T, bool O>
struct Foo {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template <class T>
struct Foo<T, true> {
    T *d_ptr;
    static short id;
    Foo(T *ptr) : d_ptr(ptr) { }
};
template<class T, bool O>
short Foo<T, O>::id = 0;
template<class T>
short Foo<T, true>::id = 1;

//.cpp
int main(int argc, char *argv[])
{
    Foo<int, true> ft(0);
    Foo<int, false> ff(0);
    cout << ft.id << " " << ff.id << endl;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文