У меня есть эти строки в моем коде:Механизма расширяемого условного оператора
//lines in mycode.c++
QString str = "...some id...";
if(str == "int")
foo< int>()
else if(str == "QString")
foo< QString>()
...
мне нужно создать механизм включает в себя пользовательские типы в этом условном операторе. Таким образом, любой программист может зарегистрировать свой класс и свою реализацию шаблона foo.
Я представляю себе это так:
//A.h -- custom class
class A { };
template< >
void foo< A>() { ... };
DECL(A, "A"); //macro to declare class
Я хочу условный оператор в mycode.C++, которая бы автоматически принимать во внимание декларации класса , поэтому он будет иметь дополнительные строки:
else if(str == "A")
foo< A>()
У меня мог бы быть такой эффект:
//common.h
void process_id(QString str) {
if(str == "int")
foo< int>()
else if(str == "QString")
foo< QString>()
...
else if(str == "A") //this lines programmer put manually
foo< A>();
}
//mycode.c++
#include "common.h"
QString str = "some_id";
process_id(str);
но что, если программист забудет отредактировать common.h файл?
Я думал, может быть, использовать систему C-macros или как-то Qt-precompilation. Является ли это возможным?
Возможно, это возможно. Однако вам нужно знать, что в какой-то момент программист должен будет предоставить список возможных строк и их результат, так что у вас все еще будет одна и та же проблема (хотя синтаксис может быть немного лучше). –
Считаете ли вы использование фабрики/карты для отправки вызовов, а не 'if/else'? –
Это чувствует все назад. Зачем использовать гигантский блок 'if', когда вы можете использовать отправку? –