私はこのようなデザインを持っています:
template <class T>
class A
{
};
template <class T>
class B : public A<T>
{
};
template <class T>
class C : public A<T>
{
};
template <class T>
class D : public C<T>, public B<T>
{
};
struct TConcrete {
int xyz;
};
class Concrete : public D<TConcrete>
{
void Foo();
};
void
Concrete::Foo()
{
Bar (boost::bind(&A::Afunc, this, _1, _2), boost::bind(&C::Cfunc, this, _1, _2), boost::bind(&D::Dfunc, this, _1, _2));
}
コンパイラは、最初の boost::bind 呼び出しについて不平を言います。C および D 内の関数の呼び出しには問題はありません。正確なエラーは次のとおりです。
boost/bind/mem_fn_template.hpp(384): エラー C2594: 'newline': [T=TConcrete] を使用した 'Concrete *' から 'A *' へのあいまいな変換
これの何が問題なのですか?