我正在使用 SystemC 库,它要求所有用户定义的类型都具有 operator<< 和 sc_trace() 函数。然而,用户定义的类型实际上是模板类中的嵌套类型,因为“嵌套类型”是根据外部类中指定的模板参数计算得出的。
template<typename T>
class Block {
typedef typename transform<T>::value NewType;
public:
struct SomeType {
SomeType() {}
SomeType(T val) : member(val) {}
NewType member;
};
};
当我像这样为 SomeType 定义 operator<<
template<typename T>
std::ostream& operator<<(std::ostream& os, const typename Block<T>::SomeType& type) {
return os << type.member;
}
编译器无法推断出 systemC 库中确实尝试使用流式操作符转储嵌套定义类型的调用。因为我宁愿不触摸库代码(在我的控制之外)。你们中的任何一位专家都知道解决这个问题的方法吗?
如果没有干净的解决方法,你知道 C++11 是否有解决方案吗?