我想创建一个函数,该函数接受<<
操作员std::cout
可以处理的任何内容。我有一个打破的例子。
#include <iostream>
template <typename T>
void my_print(const T &t) {
std::cout << t;
}
int main() {
my_print("hello\n"); // works
my_print(4); // works
my_print(std::endl); // compiler error
return 0;
}
如果我更改为void my_print(T t)
. 编译器错误是
错误:没有匹配的函数调用'my_print(<未解析的重载函数类型>)' 注:候选人是 注意:模板<class T> void my_print(const T&)
为什么编译器看到参数t
被放入时不能解析它cout
?
有什么好的方法可以解决这个问题还是我必须手动提供额外的<<
案例,例如void my_print(ostream& (*pf)(ostream&));
编辑:我知道endl
是一个函数。那么答案是函数类型不被接受为模板吗?好像我不能拥有[T = ostream& (*)(ostream&)]
?