【发布时间】:2018-07-25 12:37:21
【问题描述】:
我正在尝试为传统继承层次结构创建一个包装类,它不是严格多态的。在包装类中,我为一些方法添加了额外的功能,但对于许多其他方法,我只想调用包装类的方法。
在这里而不是
wrapper->operator()([](Derived& x)
{
x.print();
});
或
wrapper->operator->()->print();
有没有办法让我拥有
wrapper->print();
提前感谢您的回答..
【问题讨论】:
-
"但这需要我有一个 lambda" - 你永远需要一个 lambda。 lambda 只是经典函数对象的语法糖。您始终可以编写经典的 C++98 代码来获得与 lambda 相同的效果(只是更冗长)。
-
您应该在问题中以文本形式提供代码,而不是通过外部链接!
-
请看this answer的讨论,也许您可以更准确地了解您真正想要实现的目标?
-
@Aconcagua - 当然,下次会在问题中发布代码。是的,正如@Jarod42 所说,我的问题是指针的使用。一旦我做了他建议的更改,我现在可以将函数调用到包装类,而无需显式使用
operator->。谢谢 -
@Joseph 您确实在包装类中添加了新功能吗?然后考虑 Jarod 的
get()方法,仅在对象上使用的运算符上选择print的一个或另一个变体是很危险的:wrapper->print(获取原始打印)与wrapper.print()(获取更改的一个)。使用指针((*wrapper)->print()vs.wrapper->print())会更明显,但我仍然不能推荐它......
标签: c++ c++11 c++14 generic-programming