可以推断模板函数中的参数类型吗? 我在C++中写了一些模板函数,但是我不确定是否可以定义一个模板函数来推断其参数的类型。
我尝试使用推断的参数类型定义模板,但此示例无法编译:可以推断模板函数中的参数类型吗? 我在C++中写了一些模板函数,但是我不确定是否可以定义一个模板函数来推断其参数的类型。,c++,templates,c++17,auto,c++-concepts,C++,Templates,C++17,Auto,C++ Concepts,我尝试使用推断的参数类型定义模板,但此示例无法编译: template <auto> auto print_stuff(auto x, auto y) { std::cout << x << std::endl; std::cout << y << std::endl; } 模板 自动打印内容(自动x、自动y) { std::cout如果您的编译器支持概念,则可以省去参数类型的模板头和名称,即使要求实验性的
template <auto>
auto print_stuff(auto x, auto y)
{
std::cout << x << std::endl;
std::cout << y << std::endl;
}
模板
自动打印内容(自动x、自动y)
{
std::cout如果您的编译器支持概念,则可以省去参数类型的模板头和名称,即使要求实验性的C++2a模式,通常也不会启用概念。
例如,在gcc上,必须使用-fconcepts
单独启用它
看
#包括
#包括
自动打印内容(自动x、自动y)
{
STD:CUD<代码>返回0;对于主< /代码>可能是隐式的,但是很多人认为它不好。我不熟悉C++ 2A规范。有一个原因<代码> Auto <代码>是<代码> PrrtTyStudio的返回类型,而不是<代码> Value?@ AccCuGaa Iimo。edstd::endl
everywhere…@不,我只是停留在源代码附近。由于C++14,auto
可以用于返回类型推断,但这里它推断出void
.Hm…你没有在main中添加返回,它已经在那里了,最后一句是可选的…那么它现在会是坏样式吗?;)模板auto打印内容(自动x、自动y)
–您现在是否要求两个auto
s为同一类型(您只有一个模板参数!)或者与您的示例中的不同?@Aconcagua我希望每个auto
都是不同的类型,但是template…
也不起作用。如果您有相同数量的模板参数和函数参数,这可能会起作用。如果数字不同,编译器永远无法知道函数参数列表中的哪个auto在模板参数列表中自动显示的参数。委员会可能会考虑要求两个参数列表具有相同的大小,这是一个太强的限制,不值得允许全部内容。不管是不是真正的原因,我个人加入了它。。。
#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;
}
#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;
}