private 链式多继承以复用代码时碰到的问题
大致这样的代码:
s2 在实现自己的算法的时候复用了s1的算法,而s3的算法则要复用s1 s2的算法,在继承的时候出现了问题
编译错误为:
具体的代码场景在: https://github.com/fengwang/random_variate_generator
中的文件:random_variate_generator / include / vg / distribution / t.hpp 中
为了实现 t 分布,需要用到正态,X^2和指数分布生成的算法,采用了私有继承产生了错误,因为X^2算法同样复用了正态分布的算法。
s2 在实现自己的算法的时候复用了s1的算法,而s3的算法则要复用s1 s2的算法,在继承的时候出现了问题
struct s1
{
// ...
protected:
int impl( int i )
{
if ( i > 10 )
return method1(i);
return method2(i);
}
private:
int method1( int i )
{
return i*i;
}
int method2( int i )
{
return i+i;
}
};
struct s2 : private s1
{
// ...
protected:
int impl( int i )
{
if ( i < 100 )
return method1(i);
return method2(i);
}
private:
int method1( int i )
{
return s1::impl(i) * i;
}
int method2( int i )
{
return i*i*i;
}
};
struct s3: private s1, private s2
{
public:
int operator()( int i )
{
return impl( i );
}
protected:
int impl( int i )
{
if ( i & 1 )
return method1( i );
return method2( i );
}
private:
int method1( int i )
{
return s1::impl(i) * i;
}
int method2( int i )
{
return s1::impl(i) & s2::impl(i) ^ i;
}
};
int main()
{
int ans = s3()(10);
return ans;
}
编译错误为:
具体的代码场景在: https://github.com/fengwang/random_variate_generator
中的文件:random_variate_generator / include / vg / distribution / t.hpp 中
为了实现 t 分布,需要用到正态,X^2和指数分布生成的算法,采用了私有继承产生了错误,因为X^2算法同样复用了正态分布的算法。
...全文
相关推荐
Java链式编程设计
为了解决这个问题,我们可以采用链式编程来重构`Channel`类,使其支持连续调用:```javapublic class Channel { private int basicQos = 0; private
cpp代码-链式前向星模板
通过熟练掌握链式前向星,我们可以更高效地处理图相关的问题。
Java实体类实现链式操作实例解析
链式操作可以简化代码,提高开发效率,并且使代码更加简洁易读。在 Java 中,使用 Lombok 可以自动生成 getter 和 setter 方法,并实现链式操作。
JAVA中实现链式操作(方法链)的简单例子
需要注意的是,虽然链式操作在很多情况下提高了代码的可读性,但过度使用可能会导致方法链过长,降低代码的可理解性。因此,在使用链式操作时,应适度平衡代码的简洁性和可读性,避免过于复杂的链式调用。
C#用链式方法表达循环嵌套
这个问题可以通过使用循环嵌套来解决,但是为了使代码更简洁、更易于理解,作者提出了使用链式方法的思想。链式方法是C#中一种编程技巧,它允许你在单行代码中连续调用对象的方法。


