Вы можете перегружать свою функцию для разных типов, т.е.
size_t func(int);
size_t func(std::string);
В качестве альтернативы и/или дополнительно вы можете предоставить шаблон функции, который позволяет сообщить компилятору, как сгенерировать вашу функцию для любого конкретного типа, например
template<typename T>
size_t func(T const&) { return sizeof(T); }
Вы можете использовать более продвинутые методы, такие как SFINAE, для эффективной перегрузки этих шаблонных функций, т. е. для использования разных шаблонов для разных типов типов T
(т. е. целочисленных типов, указателей, встроенных типов, pod и т. д.). Затем компилятор выберет наиболее подходящий func()
(если есть) для любого вызова функции, с которым он сталкивается, и, если это шаблон, сгенерирует соответствующую функцию. Это не требует перекодирования.
Совершенно другой подход заключается в использовании универсального типа стирания, такого как boost::any
, когда функции необходимо разрешить ожидаемые типы во время кодирования (а не во время компиляции):
size_t func(boost::any const&x)
{
auto i = boost::any_cast<const int*>(x);
if(i) return func(*i);
// etc for other types, but this must be done at coding time!
}
person
Walter
schedule
22.01.2015