Я почти уверен, что он будет разделен между А и Б.
Если вам нужны независимые переменные, вы можете использовать «шаблон с любопытством повторяющихся шаблонов», например:
template<typename Derived>
class Base
{
protected:
static int method()
{
static int x = 0;
return x++;
}
};
class A : public Base<A>
{
};
class B : public Base<B>
{
};
Конечно, если вы хотите полиморфизм, вам придется определить четный класс "Baser", из которого происходит Base, поскольку Base<A>
отличается от Base<B>
, например:
class Baser
{
};
template<typename Derived>
class Base : public Baser
{
protected:
static int method()
{
static int x = 0;
return x++;
}
};
class A : public Base<A>
{};
class B : public Base<B>
{};
Теперь A и B также могут быть полиморфными.