模板函数如何选择参数
How template function chooses parameter?
#include <iostream>
#include <ostream>
template<typename T>
void Func( const T& val )
{
std::cout << "const T& valn";
}
void Func( const char* p )
{
std::cout << "const char * pn";
}
void Func( std::ostream & ( *manip )( std::ostream & ) )
{
std::cout << "ostreamn";
}
int main()
{
Func( std::endl );
Func( "aaa" );
}
观察:
1> 如果不void Func( std::ostream & ( *manip )( std::ostream & ) )
,行Func( endl );
会导致编译器错误。我认为问题是由于模板函数void Fun( const T& val )
它只能接受一种类型的T
但只能接受函数指针。
2> 没有void Func( const char* p )
,线路Func( "aaa" );
运行良好。我认为原因是类型T
可以const char*
.
问题>这些论点正确吗?
谢谢
std::endl
本身就是一个函数模板,因此除非实际指定函数,否则不能对Func
进行模板参数推导。以下方法应该有效:
Func(static_cast<std::ostream&(&)(std::ostream&)>(std::endl));
另一种方法(感谢@0x499602D2(是指定模板参数:
Func(std::endl<char, std::char_traits<char>>);
相关文章:
- 如何使用默认参数等选择模板专业化
- 对可变参数使用声明.如何选择正确的功能
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 关于如何在具有单个参数的变体构造中选择替代方案?
- 使模板函数按函数参数选择类型
- 具有参数包和通用引用的重载选择
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 根据模板参数选择宏定义
- 用于根据条件选择编译时类型的可变参数模板
- 使用 std::条件根据模板参数选择成员类型
- 根据模板参数可以选择静态的类成员
- 在运行时选择模板参数的C 函数
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- 有没有办法根据模板参数的类型在不同的类实现之间进行选择
- 在泛型编程中选择类型参数
- 模板函数如何选择参数
- 每次选择参数时调用一次的静态变量和函数