#include <iostream>
struct Foo {
template <int bias = 5>
void print() {
std::cout << bias << std::endl;
}
};
template <int bias = 5>
std::ostream &operator<<(std::ostream &os, const Foo &foo) {
return os << bias;
}
int main() {
Foo a;
a.print();
a.print<>();
a.print<1>();
std::cout << a << std::endl;
return 0;
}
このコードを表示することで、ひどい実装にもかかわらず、フォーマットを使用してデフォルトのパラメーター5
を出力Foo a
std::cout << a << std::endl
に変更し、変更を変更しない方法はありますstruct
か?
operator <<
演算子のように呼び出す場合、テンプレートパラメータを追加することはできません。
std:cout << a << std::endl;
ただしoperator <<
、関数のように呼び出す場合は、テンプレートパラメータを追加できます。戻り値の型は演算子スタイルの構文でstd::ostream &
さらに呼び出すことができることに注意してくださいoperator <<
。
operator<< <3>(std::cout, a) << std::endl;
のoperator <<
出力の前にさらに呼び出しを追加することも可能ですがa
、それはすべて元の呼び出しほど見栄えがよくありません。
operator<< <3>(std::cout << "a=", a) << std::endl;
operator <<
ヘルパークラスを導入することにより、元の作品の連鎖と連携する別のオプション。
template<int Bias>
struct Biased {
Biased(Foo& foo) :_foo{ foo } {}
Foo& _foo;
};
template<int Bias>
std::ostream& operator<<(std::ostream& os, const Biased<Bias>& biased) {
return os << Bias;
}
std::cout << "a=" << Biased<42>(a) << std::endl;
forが必要に応じてのコンテンツも出力できるように追加_foo
したことに注意してください(これはここのコードでは発生しません)。Biased
operator <<
Biased
_foo
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加