我正在用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;
}
是否可以使用推断的参数类型定义模板,而不是为每个类型赋予唯一的名称?
如果您的编译器支持概念,则可以省去模板标题和参数类型的名称,即使要求使用实验性C ++ 2a模式,通常也不会启用这些概念。
例如,在gcc上,必须使用单独启用它-fconcepts
。
#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()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句