Ну, да, это - то, что это делает. Я использую его для участников, которые изменяются методами, которые не делают логически , изменяют состояние класса - например, для ускорения поисков путем реализации кэша:
class CIniWrapper
{
public:
CIniWrapper(LPCTSTR szIniFile);
// non-const: logically modifies the state of the object
void SetValue(LPCTSTR szName, LPCTSTR szValue);
// const: does not logically change the object
LPCTSTR GetValue(LPCTSTR szName, LPCTSTR szDefaultValue) const;
// ...
private:
// cache, avoids going to disk when a named value is retrieved multiple times
// does not logically change the public interface, so declared mutable
// so that it can be used by the const GetValue() method
mutable std::map<string, string> m_mapNameToValue;
};
Теперь, необходимо использовать это с осторожностью - проблемами параллелизма является большое беспокойство, поскольку вызывающая сторона могла бы предположить, что они ориентированы на многопотоковое исполнение только с помощью const
методы. И конечно, изменение mutable
данные не должны изменять поведение объекта никаким значительным способом, что-то, что могло быть нарушено примером, который я дал, если, например, ожидалось, что изменения, записанные в диск, будут сразу видимы к приложению.
Я думаю, что лучшим подходом к этому было бы использование условных блоков для ваших ссылок непосредственно внутри файла проекта. Затем все, что вам нужно сделать, это установить конкретный флаг во время сборки msbuild для сборки "release", и она будет выбирать правильные ссылки.
Например,
<ItemGroup Condition="'$(IsRelease)'=='True'">
<Reference Include="..." />
</ItemGroup>
<ItemGroup Condition="'$(IsRelease)'!='True'">
<Reference Include="..." />
</ItemGroup>
Звучит как странная ситуация.
Мое предложение таково.
Выделите проекты, у которых есть готовые версии, в отдельное решение. Сделайте так, чтобы все они были собраны в
\ assembly \ fromsource
. Скопируйте предварительно созданные в;
\ assembly \ prebuilt
Перед разработкой остальных проектов скопируйте любой каталог в
\ assembly \ development
Измените свои проекты так, чтобы они указывали на версии в \ assembly \ development.
Итак, теперь вы всегда создаете свой продукт на основе предварительно скомпилированных двоичных файлов в известной папке, поэтому вам никогда не нужно изменять свой проект. Но вы можете переключаться между версиями по желанию.
Для получения бонусных очков измените событие предварительной сборки, чтобы скопировать библиотеки DLL, прежде чем что-то начнется, и исходная папка может различаться в зависимости от конфигурации. Затем добавьте конфигурацию PREBUILT вместе с DEBUG и RELEASE.