2013-08-08 3 views
13

Может ли ключевое слово auto в C++ 11 заменить шаблоны функций и специализации? Если да, в чем преимущества использования функций шаблона и специализаций, просто набирая параметр функции как auto. Если нет, я полностью ожидаю, что я попаду в ад, но я новичок в C++, но, пожалуйста, успокойтесь.Шаблоны функций против автоматического ключевого слова

template <typename T> 
void myFunction(T &arg) 
{ 
    // ~ 
} 

против

void myFunction(auto &arg) 
{ 
    // ~ 
} 
+4

Вы не получаете ни слова за то, что не знаете что-то (по крайней мере, так должно быть, и в целом оно работает). Вы можете ожидать, что грязные взгляды не будут делать исследования. Вы пытались скомпилировать эти фрагменты, посмотрели ли вы на один из существующих вопросов о 'auto', который мы здесь имеем? – delnan

+3

Есть способ в C++ 14: 'auto myFunction = [] (auto & arg) {...};' – chris

ответ

8

В двух словах, auto не может быть использован в целях опускают фактические типы аргументов функции, так торчат с шаблонами функций и/или перегрузками. auto законно используется для автоматического вывести типы переменных:

auto i=5; 

Будьте очень осторожны, чтобы понять разницу между следующими, однако:

auto x=... 
auto &x=... 
const auto &x=... 
auto *px=...; // vs auto px=... (They are equivalent assuming what is being 
       //     assigned can be deduced to an actual pointer.) 
// etc... 

Он также используется для возвращаемых типов суффиксов:

template <typename T, typename U> 
auto sum(const T &t, const U &u) -> decltype(t+u) 
{ 
    return t+u; 
} 
+0

Важно указать, что авто в порядке и хорошо в 99% случаев, иногда вам нужно остановиться на секунду и подумать о том, что делает автомобиль по-настоящему. http://stackoverflow.com/questions/12773257/does-auto-type-assignments-of-a-pointer-in-c11-require указатели могут быть поворотным для авто , – user2485710

+0

@ user2485710, добавлено больше информации на мой ответ на основе вашего комментария. –

6

Может ли ключевое слово auto в C++ 11 заменить шаблоны функций и специализации?

№ Есть предложения по использованию ключевого слова для этой цели, но это не в C++ 11, и я думаю, что C++ 14 разрешит его только для полиморфных lambdas, а не для шаблонов функций.

Если да, в чем преимущества использования функций шаблона и специализаций, просто набирая параметр функции как auto.

Возможно, вам все еще нужен параметр именованного шаблона, если вы хотите обратиться к типу; это было бы более удобно, чем std::remove_reference<decltype(arg)>::type или что-то еще.

Смежные вопросы