LINUX.ORG.RU

Вызвать собственный статический метод у всех своих потомков

 , ,


0

3
class SomeInterface {
public: virtual std::string getClassName() = 0;
        virtual SomeInterface *createInstanceByClassName(const std::string className){
                for (ClassType child: SomeInterface.children)
                        if (child::getClassName() == className)
                                return new child;
                throw ClassNotFoundException();
        }
}

Реально ли сделать подобное стандартными средствами C++ без дополнительных полей? Если нет, то какие наиболее короткие и понятные способы есть для этого? Может, для подобного паттерна есть название?

Ответ на: комментарий от anonymous

Вместо getClassName может быть что угодно

Например, getMagicNumber или getQRCode. Не хотеть magiC и qrc.

Northsoft ★★
() автор топика
Ответ на: комментарий от quaker

Спасибо, держи +1 в карму

Будем курить вдумчиво и внимательно

Northsoft ★★
() автор топика

На смолтоке делается так:

self class allSubclasses do: [:each | each doSomething]

на плюсы сам переведешь

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Ну а так, да, тут правильно подсказали смотреть в сторону фабрик

yoghurt ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.