gpt4 book ai didi

c++ - 模板运算符 << 循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:32 28 4
gpt4 key购买 nike

在我的库代码中:

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。有什么办法可以绕过这个限制吗?

最佳答案

您可以为自己的消息类型使用模板特化。

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);

虽然不确定这是否有效

编辑:添加了一些多态性

编辑:否则你不能。

关于c++ - 模板运算符 << 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792225/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com