Если класс String
является шаблоном, вам всегда нужно использовать нотацию <>
при обращении к классу.
Что вы можете сделать, это написать шаблон специализации для случая, когда StackBufferSize == 0
, который будет использовать кучу.
template <int StackBufferSize = 0>
class String
{
// code to allocate string on the stack
};
template <>
class String<0>
{
// code to allocate on the heap
};
Таким образом, когда вы объявляете String<>
, он будет использовать специализацию для кучи.
Тем не менее, это, вероятно, не очень хорошее дизайнерское решение. Лучшим решением, вероятно, было бы просто использовать std::basic_string
и предоставить собственный распределитель, если вам действительно нужно избегать выделения кучи.