首页 > 解决方案 > 每个实例不同的模板类的静态 constexpr 成员?

问题描述

我的印象是一个类的静态成员在该类的所有实例之间共享它们的值。不过,我的理解似乎有所欠缺,可能是因为包含模板或constexpr在此示例中:

#include <iostream>
#include <array>

template <typename T, std::size_t maxSize>
class Foo
{
public:
    unsigned int getLen() {
        return containerLen;
    }
    
private:
    static constexpr std::size_t containerLen = maxSize + 1;
    std::array<T, containerLen> arr;
};

int main()
{
    Foo<int, 10> foo1;
    std::cout << foo1.getLen() << std::endl;
    
    Foo<int, 12> foo2;
    std::cout << foo2.getLen() << std::endl;
    std::cout << foo1.getLen() << std::endl;

    return 0;
}

这给出了以下输出:

    11
    13
    11

我可能遗漏了一些明显的东西,但是是什么允许每个实例Foo具有不同的值containerLen

标签: c++templates

解决方案


Foo<int, 10>并且Foo<int, 12>不同的类- 它们只是共享相同的模板。的所有实例Foo<int, 10>将共享相同containerLen的 ; 的所有实例Foo<int, 12>。但是这两个类不会共享一个共同的价值。


推荐阅读