私は、すべてのユーザー定義型に operator<< および sc_trace() 関数が必要な SystemC ライブラリを使用しています。ただし、「ネストされた型」は外側のクラスで指定されたテンプレート引数から計算されるため、ユーザー定義型は実際にはテンプレート クラス内のネストされた型です。
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 にこれに対する解決策があるかどうか知っていますか?