在库代码中我有:
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。有没有办法绕过这个约束?
答案 0 :(得分:1)
您可以为自己的消息类型使用模板专门化。
class foo {};
class bar : public foo {}
template <>
VeryStrictClass& VeryStrictClass::operator<< <foo> (const foo & bar) {
// something something
return *this;
}
VeryStrictClass v;
bar* b = new bar;
foo* f = new foo;
v << *foo << *((foo*)bar);
不确定这是否有效
EdiT:添加了一些多态性
编辑:否则你不能。