在c++中模板类可以有静态成员吗?

Can template classes have static members in C++

本文关键字:静态成员 c++      更新时间:2023-10-16

c++中的模板类可以有静态成员吗?因为它在使用之前不存在并且是不完整的,这可能吗?

是。静态成员在template< … > class { … }块中声明或定义。如果声明了但没有定义,则必须有另一个声明来提供成员的定义。

template< typename T >
class has_static {
    // inline method definition: provides the body of the function.
    static void meh() {}
    // method declaration: definition with the body must appear later
    static void fuh();
    // definition of a data member (i.e., declaration with initializer)
    // only allowed for const integral members
    static int const guh = 3;
    // declaration of data member, definition must appear later,
    // even if there is no initializer.
    static float pud;
};
// provide definitions for items not defined in class{}
// these still go in the header file
// this function is also inline, because it is a template
template< typename T >
void has_static<T>::fuh() {}
/* The only way to templatize a (non-function) object is to make it a static
   data member of a class. This declaration takes the form of a template yet
   defines a global variable, which is a bit special. */
template< typename T >
float has_static<T>::pud = 1.5f; // initializer is optional

为模板的每个参数化创建一个单独的静态成员。不可能在模板生成的所有类之间共享单个成员。为此,必须在模板之外定义另一个对象。一个部分专门化的trait类可能会有帮助。