понедельник, 27 августа 2018 г.

Curiously Recurring Template Pattern (CRTP)

https://ru.wikipedia.org/wiki/Странно_рекурсивный_шаблон

#include <iostream>  
 
using namespace std;  
 
template<typename T>  
class BaseSinglton  
{  
    protected:  
        BaseSinglton() {}  
        virtual ~BaseSinglton() {}
    public:  
        static T& instance()   
        {
            static T oObj;   
            return oObj;   
        }
};  
 
class Settings : public BaseSinglton<Settings>  
{  
    friend class BaseSinglton<Settings>;  
    private:  
        Settings() : BaseSinglton<Settings>() {}  
        virtual ~Settings() {}  
};
 
int main()   
{  
    Settings &oSetting = Settings::instance();  
    printf("poSetting = %p", &oSetting);  
    return 0;  
}  

1 комментарий:

  1. Осталось написать дефайн заменяющий строку
    class Settings : public BaseSinglton
    На
    CLASS_SINGLETONE(name)

    (y)

    ОтветитьУдалить