模板函数中的参数类型可以推断吗?

Can the types of parameters in template functions be inferred?

我正在用 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; 
}

是否可以使用推断的参数类型来定义模板,而不是为每个类型指定一个唯一的名称?

如果您的编译器支持概念,您可以省去 template-header 和 parameter-types 的名称,即使要求实验性 C++2a 模式,概念通常也不会启用。
例如,在 gcc 上,必须使用 -fconcepts.

单独启用它

参见 live on 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() 是隐式的。