C++ 调用重载的父对象';C++;
我试图理解是否可以从子类调用父函数成员 基本上我有以下代码:C++ 调用重载的父对象';C++;,c++,templates,inheritance,crtp,overload-resolution,C++,Templates,Inheritance,Crtp,Overload Resolution,我试图理解是否可以从子类调用父函数成员 基本上我有以下代码: struct Parent { template<class... Args> void doFoo(Args&&... args) { std::cout << "parent doFoo"; } template<class... Args> void foo(Args&&... args)
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()
结构父级
{
模板
void doFoo(Args&…Args)
{
std::cout我不知道这是否是一个选项,但是如果您能够负担模板类而不是方法,那么您可以将“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()
}
#包括
模板
结构父级
{
虚拟void doFoo(Args&&…Args)
{
std::不清楚“类似技术”是什么意思。可以使用[static | dynamic]_例如,cast。好的,我将取消该要求。除了引入开销的选项外,每个选项都是可以的。实际上,这并不十分清楚。您已经在使用CRTP关键字。您在实现该关键字时有困难吗?我想知道是否有其他方法可以做到这一点,或者CRTP是否是唯一的解决方案注意。也有不同的方法来实现它。我想我假设还有其他解决方案。但是CRTP有什么问题?有趣的解决方案,谢谢分享。事实是它使用了虚拟关键字,我想避免任何额外的费用。你说的“开销”是什么意思还有,你想要多态性而不需要虚拟关键词,这甚至没有意义。阿图尔:只是谷歌虚拟C++开销来理解我的意思。mean@Saturnu我相信上面的多态性可以在编译时确定,并且遵循CRTP的相同思想,记住了这一点,使用您提供的wikipedia链接,我们得到了:如何然而,在许多情况下,所需的多态行为是不变的,并且可以在编译时确定可以用来实现静态多态性,这是对编程代码中多态性的一种模仿,但它在编译时得到解决,因此不需要运行时虚拟表查找。我想你不明白我刚才所说的,它是在编译时确定的,即使使用virtual关键字也是如此。请看一下这个