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

安德森·格林(Anderson Green)

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

现场直播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::endlstd::flush在极少数情况下使用无法避免昂贵的手动冲洗。此外,return 0;是的隐式main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以使用自动占位符来推断非类型模板参数的函数结果吗?

从函数参数推断模板类型

可以指定C ++ 20模板化的lambda来推断嵌套在参数中的类型吗?

我们可以从函数的参数中推断出泛型类型参数吗?

在C ++中可以推断类型转换为模板类型吗?

从函数返回类型推断模板参数类型

在Julia中,宏可以访问其参数的推断类型吗?

变量模板可以推断类型吗?

C ++模板可以推断返回类型吗?

从标记模板文字函数参数推断类型

非类型模板参数中的占位符类型可以涉及作为模板参数传递的函数的重载解析吗?

我可以从输入参数推断类型吗?

从类定义中推断模板参数类型

我可以使用类型作为值(或从构造函数参数正确推断通用类类型)吗?

打字稿可以根据参数值推断函数的响应类型吗?

函数的类型推断作为 Typescript 中的参数

推断函数的参数类型

在TypeScript中,我可以从函数重载中推断映射类型吗?

c ++模板参数类型推断

整体模板参数的类型推断

从函数参数推断类型参数

是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

可以推断参数的通用接口中使用的类型吗?

可以为参数类型推断嵌套对象的键吗?

泛型身份函数可以推断元组类型吗?

模板函数可以推论lambda的参数吗?

如何推断C ++ 11中的模板参数类型?

模板函数中std :: string的类型推断失败

实例化模板时,可以从const类型模板参数中获取const依赖名称吗?