【发布时间】:2013-11-07 21:32:25
【问题描述】:
我有这样的设计:
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' : 来自 'Concrete *' 的模棱两可的转换 到'一个 *' 和 [ T=T混凝土 ]
你有什么想法吗?
【问题讨论】:
-
至少有一个公共继承应该是
virtual public。 -
谢谢。需要开始修改高中概念。好久没接触c++了。
-
通常情况下,对抽象类以外的任何事物(例如接口)使用多重继承表明您可能需要重新考虑您的设计。非抽象类的多重继承是最好的解决方案,这是非常罕见的。
标签: c++ boost-bind diamond-problem