Listing E
///////////////////////////////////////////////////////////////////
// AllUsers.cpp
#include "AllUsers.h"
#include <iostream>
 
namespace // anonymous namespace
{   
    const long MAX_USERS = get_prop< long>( "max_users");
    const int MAX_FAILS = get_prop< int>( "max_fails");
}; // anonymous namespace
 
 
AllUsers::AllUsers()
{ std::cout << "there are max " << MAX_USERS << " users that can login." << std::endl; }
 
 
 
///////////////////////////////////////////////////////////////////
// AllUsers.h
#ifndef ALL_USERS_H
#define ALL_USERS_H
 
#include "app_props.h"
struct AllUsers
{
    AllUsers();
};
 
#endif
 
 
 
///////////////////////////////////////////////////////////////////
// app_props.cpp
#include "properties.h"
#include <iostream>
 
namespace Private {
    properties_base & get_properties_obj()
    {
        static properties props( "props.txt");
        return props;
    }
};
 
 
 
 
///////////////////////////////////////////////////////////////////
// app_props.h
#include "properties_base.h"
#include <iostream>
 
namespace Private {
    properties_base & get_properties_obj();
};
 
template< class type>
inline type get_prop( const std::string & strPropName)
{
    type val = type();
    Private::get_properties_obj().get( strPropName, val);
    return val;
}
 
 
 
 
///////////////////////////////////////////////////////////////////
// main.cpp
#include "AllUsers.h"
#include <iostream>
 
AllUsers s_AllUsers;
 
int main() {
    std::cin.get();
    return 0;
}
 
 
 
#///////////////////////////////////////////////////////////////////
# props.txt
"max_fails" "5"
"max_users" "1000"