<<
オペレーターが処理できるものは何でも受け取る関数を作成したいと考えています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(<unresolved overloaded function type>)' の呼び出しに一致する関数がありません 注:候補は 注: template<class T> void my_print(const T&)
t
引数が に入れられていることを確認したときに、コンパイラがそれを解決できないのはなぜcout
ですか?
これを修正する良い方法はありますか、または追加の<<
ケースを手動で提供する必要がありますか?void my_print(ostream& (*pf)(ostream&));
編集:関数であることは知っendl
ています。関数型はテンプレートとして受け入れられないというのが答えですか? 私が持つことができないように[T = ostream& (*)(ostream&)]
?