Мы можем реализовать разные версии функций с одинаковым именем, используя перегрузку функций. Например:
int max(int a, int b) { return a>b?a:b; }
int max(int a, int b, int c)
{ return max(a,b)>max(b,c)?max(a,b):max(b,c); }
Мы также можем настроить функции для разных типов параметров, используя шаблоны функций. Например:
template<typename _T>
void debug(_T a, std::string b) { cout<<a<<b<<endl; }
template<typename _T, typename _T1>
void debug(_T a, _T1 b, std::string c) { cout<<a<<b<<c<<endl; }
Однако это правило не работает (по крайней мере, сейчас) для шаблонов классов. Например:
template<typename _T> struct Debug {
_T _a;
Debug(_T a) : _a(a) {}
void debug(std::string s) { cout<<_a<<s; }
};
template<typename _T, typename _T1> struct Debug {
_T _a;
_T1 _b;
Debug(_T a, _T1 b) : _a(a), _b(b) {}
void debug(std::String s) { cout << _a << _b << s; }
};
Приведённый выше код не соответствует правилам компилятора (VS2010). То есть мы не можем реализовать разные версии шаблонов классов с одинаковыми именами.
Есть ли способ преодолеть это ограничение? Да, мы можем использовать библиотеку TmplArgs, чтобы получить эту возможность.
Хотя использование TmplArgs стало проще, оно всё ещё не идеально:
Вот пример использования TmplArgs для изменения шаблона Debug, приведённого выше:
Debug<void(int)> a;
a.debug(3,"0");
Debug<void(int,string)> b;
b.debug(3, "4", "0");
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )