JUCE icon indicating copy to clipboard operation
JUCE copied to clipboard

Allow initialization of PropertiesFile::Options using C++11 initializer list and C++20 designated initializer

Open l0ner opened this issue 4 months ago • 0 comments

The presence of a default Ctor for PropertiesFile::Options, prevents initialization of this struct using C++11 Initializer List, or C++20 designated initializers.

This means that PropertiesFile::Option properties need to be set manually, every time referencing the variable that holds the Option resulting in quite repetitive code. Ie:

juce::PropertiesFile::Options userSettingsFileOptions;
userSettingsFileOptions.applicationName     = "MyApp";
userSettingsFileOptions.filenameSuffix      = ".bin";
userSettingsFileOptions.folderName          = "myAppSettingDir";
userSettingsFileOptions.osxLibrarySubFolder = "Application Support";
userSettingsFileOptions.storageFormat       = PropertiesFile::storeAsBinary;
// ...
juce::ApplicationProperties userSettings;
userSettings.setStorageParameters(userSettingsFileOptions);

While using the C++11 initializer list requires all aggregate member values to be specified in order, it results in a bit less repetitive code:

juce::ApplicationProperties userSettings;
userSettings.setStorageParameters(juce::PropertiesFile::Options {
    "MyApp",
    ".bin",
    "myAppSettingsDir",
    "Application Support",
    true,
    true,
    false,
    3000,
    PropertiesFile::StorageFormat::storeAsBinary
});

By allowing the use of C++20 designated initializer the code can be made terser (and more readable) than the one required when using C++11 initializer list.

juce::ApplicationProperties userSettings;
userSettings.setStorageParameters(juce::PropertiesFile::Options {
    .applicationName     = "MyApp",
    .filenameSuffix      = ".bin",
    .folderName          = "myAppSettingsDir",
    .osxLibrarySubFolder = "Application Support",
    .storageFormat       = juce::PropertiesFile::StorageFormat::storeAsBinary
});

l0ner avatar Aug 14 '25 23:08 l0ner