ライブラリコードには次のものがあります。
class VeryStrictClass
{
public:
template<typename UNKNOWN_TYPE>
VeryStrictClass& operator<<(const UNKNOWN_TYPE & value) {
struct can_not_format_unknown_type {};
can_not_format_unknown_type error = value;
}
};
それを再実装する方法はありません。
これは、次のような関数を宣言することを禁止します
template <typename MsgType>
/*check toString existance*/
VeryStrictClass& operator << (VeryStrictClass& o, const MsgType* msg)
{
BOOST_ASSERT(msg != NULL);
return o << msg->toString();
}
toString() は仮想ではありません。
VeryStrictClass に入れる似たようなクラスがたくさんあります。この制約を回避する方法はありますか?