Можно ли определить типы параметров в шаблонных функциях? - PullRequest
3 голосов
/ 25 июня 2019

Я пишу некоторые шаблонные функции на C ++, но я не уверен, возможно ли определить шаблонную функцию, которая определяет типы ее параметров.

Я попытался определить шаблон с предполагаемыми типами параметров, но этот пример не скомпилируется:

template <auto>   
auto print_stuff(auto x, auto y) 
{ 
    std::cout << x << std::endl;
    std::cout << y << std::endl;
}

Это работает, когда я присваиваю уникальное имя каждому типу параметра, но это выглядит несколько излишним:

#include <iostream> 
#include <string>

template <class Redundant_1,class Redundant_2>   
auto print_stuff(Redundant_1 x, Redundant_2 y) 
{ 
    std::cout << x << std::endl;
    std::cout << y << std::endl;
}

int main() 
{ 
    print_stuff(3,"Hello!");
    return 0; 
}

Можно ли определить шаблон с выведенными типами параметров вместо того, чтобы давать каждому типу уникальное имя?

1 Ответ

3 голосов
/ 25 июня 2019

Вы можете обойтись без заголовка шаблона и имен для типов параметров, если ваш компилятор поддерживает концепции, которые обычно не включаются, даже если запрашивается экспериментальный режим C ++ 2a.
Например, на gcc ондолжен быть отдельно включен с помощью -fconcepts.

См. в прямом эфире на coliru .

#include <iostream> 
#include <string>

auto print_stuff(auto x, auto y) 
{ 
    std::cout << x << std::endl;
    std::cout << y << std::endl;
}

int main() 
{ 
    print_stuff(3,"Hello!");
    return 0; 
}

В качестве исключения, избегайте std::endl и используйте std::flush вВ редких случаях вы не можете избежать дорогостоящей ручной промывки.Кроме того, return 0; подразумевается для main().

...