在 C++ 中从子 class 调用重载的父方法
Calling an overloaded parent's method from a child class in C++
我正在尝试了解是否可以从子项中调用父项的函数成员 class。
基本上我有以下代码:
struct Parent
{
template<class... Args>
void doFoo(Args&&... args)
{
std::cout << "parent doFoo";
}
template<class... Args>
void foo(Args&&... args)
{
doFoo(args...);
}
};
struct Child : Parent
{
template<class... Args>
void doFoo(Args&&... args)
{
std::cout << "child doFoo";
}
};
Child c;
c.foo(); // This should invoke Child::doFoo()
有没有一种简单的方法可以在不引入开销的情况下获得 "child doFoo" 作为输出?
我不知道它是否是一个选项,但如果你能负担得起模板化 class 而不是方法,你可以将 "doFoo" 设为虚拟然后它会像你一样工作预计。
#include <iostream>
template <typename ... Args>
struct Parent
{
virtual void doFoo(Args&&... args)
{
std::cout << "parent doFoo";
}
void foo(Args&&... args)
{
doFoo(args...);
}
};
template <typename ... Args>
struct Child : Parent <Args...>
{
void doFoo(Args&&... args) override
{
std::cout << "child doFoo";
}
};
int main()
{
Child<> c;
c.foo(); // This should invoke Child::doFoo()
}
我正在尝试了解是否可以从子项中调用父项的函数成员 class。
基本上我有以下代码:
struct Parent
{
template<class... Args>
void doFoo(Args&&... args)
{
std::cout << "parent doFoo";
}
template<class... Args>
void foo(Args&&... args)
{
doFoo(args...);
}
};
struct Child : Parent
{
template<class... Args>
void doFoo(Args&&... args)
{
std::cout << "child doFoo";
}
};
Child c;
c.foo(); // This should invoke Child::doFoo()
有没有一种简单的方法可以在不引入开销的情况下获得 "child doFoo" 作为输出?
我不知道它是否是一个选项,但如果你能负担得起模板化 class 而不是方法,你可以将 "doFoo" 设为虚拟然后它会像你一样工作预计。
#include <iostream>
template <typename ... Args>
struct Parent
{
virtual void doFoo(Args&&... args)
{
std::cout << "parent doFoo";
}
void foo(Args&&... args)
{
doFoo(args...);
}
};
template <typename ... Args>
struct Child : Parent <Args...>
{
void doFoo(Args&&... args) override
{
std::cout << "child doFoo";
}
};
int main()
{
Child<> c;
c.foo(); // This should invoke Child::doFoo()
}