У меня есть классическая абстрактная реализация фабрики, которую я хотел бы предоставить с необязательным аргументом конструктора. Тематический ответ казался простым с использованием шаблонов с переменными значениями, но я застрял с VS2010, который не поддерживает его. Так что по крайней мере один аргумент, подобный этому:
template <class IFTYPE, typename IDTYPE=std::string, typename Args=void >
class AbstractFactory {
typdef std::shared_ptr<IFTYPE> (*CreateFunc)(Args);
public:
std::shared_ptr<IFTYPE> create( IDTYPE id, Args args ) {
return nullptr;
}
};
Проблема в том, что я не могу обработать тип по умолчанию в методе create
для void
. Поскольку я не могу назвать аргумент void
.
Как мне обойти это, сохранив опцию для разных типов аргументов? Частичная специализация не должна работать, так как это изменит подпись create
. Какие у меня есть варианты?
Спасибо ...