作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下草图
//g++ 7.4.0
#include <iostream>
template<int T>
struct X {
static int type() { return T; };
};
template<typename T>
struct FooBase {
int foo() { return T::type(); }
};
struct Foo : public FooBase<X<1>>, public FooBase<X<2>> {
template<int T>
int foo() { return FooBase<X<T>>::foo(); }
};
int main()
{
std::cout << "Hello, world!\n";
Foo fobj;
std::cout << fobj.foo<1>() << std::endl;
std::cout << fobj.foo<2>() << std::endl;
}
每当我调用
fobj.foo<1>()
时,此示例都有效或
fobj.foo<2>()
调用来自其相应基类的正确 foo 方法。
template<int T>
int foo() { return FooBase<X<T>>::foo(); }
Foo 类中的方法,并以其他方式从基类中访问正确的方法。我问这个是因为我们假设
FooBase
class 已经有很多方法了,我不喜欢 class
Foo
我需要创建该包装器只是为了从基类调用正确的方法。
最佳答案
所以这是你可以做到的一种方法。作为您的Foo
派生自基础,您可以通过将以下函数添加到 Foo
来提前一步添加消歧。 :
template<int I>
FooBase<X<I>>& as_base() { return static_cast<FooBase<X<I>>&>(*this); }
调用站点看起来像
Foo f;
f.as_base<1>().foo();
仍然不是很漂亮,但至少您不必为所有函数编写委托(delegate)。
关于c++ - 基于某些模板参数从多个基类访问 corect 方法,而不用隐藏它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62796543/
我有以下草图 //g++ 7.4.0 #include template struct X { static int type() { return T; }; }; templat
方法 1 中的代码是否不正确(使用三元运算符)。++it 这里是否有未定义的评估顺序。或者两种方法相同: 方法一: struct X { int id; int j; }; void
我是一名优秀的程序员,十分优秀!