метапрограммирования (c++11, если что):
                  
                  
                  
                  
                  
                  в классе нужно создать виртуальную функцию и статическую функцию, из статической функции звать виртуальную (не забыв объект конечно):
                  
                  
                  struct Foo {
                  
                  
                    static Foo* impl;
                  
                  
                  
                  
                  
                    virtual barImpl(int a) = 0;
                  
                  
                    static void bar(int a) {impl->barImpl(a);}
                  
                  
                  };
                  
                  
                  
                  
                  
                  Хочется это дело автогенерировать на этапе компиляции, псевдокод:
                  
                  
                  struct Foo {
                  
                  
                    static Foo* impl;
                  
                  
                    
                  
                  
                    METAMAGIC(void bar(int a));
                  
                  
                  };
                  
                  
                  Есть идеи как такое (или похожее) сделать?
                  
                  
                
*impl должен уходить в bar через аргумент.
Можно просто макросом же, не?
Если без макросов, то можно публично наследоваться от метафункции, которой передавать тип Foo (для crtp), и сигнатуру функции bar. И вроде можно сгенерировано в этой метафункции нужный код. Только не знаю как своё имя для функции bar сделать
Обсуждают сегодня