2012-03-08 4 views
2

Я хотел бы, чтобы класс шаблона автоматически выбирал свой параметр на основе типа класса, переданного конструктору. объекты уже имеют типы.Выбор параметра шаблона класса политики на основе перегруженного конструктора

InputA a; 
InputA a2; 
InputB b; 

этих типов следует понимать конструкторами

out<>(a) out; 

является

out<InputA>(a) out; 

.

out<>(a2) out; 

является

out<InputA>(a2) out; 

.

out<>(b) out; 

является

out<InputB>(b) out; 

это кажется излишним для определения шаблона аргумента (политика), когда это может быть извлечено из типа входного параметра.

ответ

7

Эта проблема возникает с std::pair. Стандартным обходным решением этой проблемы является определение фабрики шаблонов (например, std::make_pair()).

например.

template<class policy> 
out<policy> make_out(policy p) 
{ 
    return out<policy>(p); 
} 

auto o = make_out(a); 
+0

это хорошо. но просто убедитесь, что есть ли способ сделать это с классом вместо функции? что-то вроде CRTP может быть? –

+1

Я ничего не знаю об этом. – authchir