typedef を直接使用することはできません。typedef が使用されている場所はどこでも、元の型と同等であるため、次のように記述すると、
typedef boost::function<void(A)> B;
typedef boost::function<void(B)> A;
次に、B
と同等でboost::function<void(A)>
あり、これは と同等でboost::function<void(boost::function<void(B)>)>
あり、以下が得られるまで続きます。
boost::function<void(boost::function<void(boost::function<void(...)>)>)>
、これは無限長のタイプです。
ただし、(少なくとも) 2 つのタイプのいずれかを astruct
またはとして定義できclass
ます。
struct A;
typedef boost::function<void(A)> B;
struct A
{
B b;
A(B b) : b(b) {}
// optional:
void operator() (A a) { b(a); }
};
型を完全に「透過的に」動作させるには、コンストラクターや変換演算子を追加する必要がある場合があります。または、構造体に明示的にアクセスすることもできます。