У меня есть к классам:Как написать функцию, которая принимает разные типы аргументов?
template <class T>
class shared_vector
{
T data;
}
template <class T>
class device_vector
{
T data;
}
Я хочу, чтобы написать функцию, которая п accects любой объект, будь то типа shared_vector
или device_vector
и устанавливает некоторые флаги соответственно.
Теперь очевидным решением является переход на перегрузка функции. Но предположим, что функция f принимает 10 аргументов, которые могут быть либо shared_vector
, либо device_vector
, Мне пришлось бы написать 1024 перегруженных функции.
Другим решением является использование родительского классаhybrid_vector
из которых как device_vector
и shared_vector
наследует от.
Но, к сожалению, код device_vector не входит в мой контроль.
Как решить эту проблему?
ПРИМЕЧАНИЕ: Я знаю, что typeid (переменная) .name() может указывать тип, но что будет объявлением моей функции и как я могу вывести из него тип?
Похоже, вам может понадобиться шаблон строителя для решения этого комбинаторного взрыва. –
Что общего у этих разных типов? –
Или на самом деле просто массив указателей супертипа. Учитывая, что вы не контролируете типы, о которых идет речь, вы можете просто создать свои собственные типы оберток. –