Код: Выделить всё
struct ContainerStatus {};
struct ContainerItem
{
mutable ContainerStatus status;
};
template
class Container
{
public:
Container(ContainerStatus T::*statusField)
: m_statusField(statusField) { }
void push_back(T* ptr)
{
// Allocate and move the pointer...
// Update the status of the pointed item
// T may be const as part of a const container
}
private:
ContainerStatus T::*m_statusField;
};
ContainerItem item;
Container container;
container.push_back(&item);
ptr->*status = ...; // Error if T is const
const_cast(ptr)->*status = ...;
// OR
const_cast(ptr->*status) = ...;
< /code>
Это не кажется очень элегантным и технически не является постоянным корректом, если не гарантированно поле не будет изменчивым, для которого нет никакой защиты времени компиляции. Следовательно, мне было интересно, есть ли какой -нибудь способ аннотировать указатель члена данных, чтобы указать, что он должен указывать на изменчивое поле.
Подробнее здесь: https://stackoverflow.com/questions/795 ... ble-fields