Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以推断模板函数中的参数类型吗? 我在C++中写了一些模板函数,但是我不确定是否可以定义一个模板函数来推断其参数的类型。_C++_Templates_C++17_Auto_C++ Concepts - Fatal编程技术网

可以推断模板函数中的参数类型吗? 我在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。ed
std::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; 
}