gpt4 book ai didi

c++ - 基于某些模板参数从多个基类访问 corect 方法,而不用隐藏它们

转载 作者:行者123 更新时间:2023-12-02 10:00:26 27 4
gpt4 key购买 nike

我有以下草图

//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)。
查看完整示例 here.

关于c++ - 基于某些模板参数从多个基类访问 corect 方法,而不用隐藏它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62796543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com