注意:这是 question-with-answer ,以便记录其他人可能认为有用的技术,以便了解其他人更好的解决方案。请随意添加批评或问题作为评论。也可以随意添加其他答案。 :)子>
1 问题:如何定义函数foo
和bar
的“捕获所有”通用实现(以及其他此类函数) (优选地通过一般机制),例如,以下代码有效:
struct Base {};
auto foo( Base const& ) -> int { return 101;}
auto bar( Base const&, int x ) -> int { return x + 2; }
struct Derived: Base {};
struct Other
{
auto foomethod() -> int { return 201; }
auto barmethod( int const x ) -> int { return x + 2; }
};
#include <iostream>
using namespace std;
auto main() -> int
{
Derived d;
int const r1 = foo( d ); // Invokes the Base arg overload.
int const r2 = bar( d, 100 ); // Invokes the Base arg overload.
cout << r1 << " " << r2 << endl;
Other o;
int const r3 = foo( o ); // Invokes the general implementation.
int const r4 = bar( o, 200 ); // Invokes the general implementation.
cout << r3 << " " << r4 << endl;
}
这是关于通过库提供foo
,bar
和类似功能。解决方案应该适用于用户为其提供重载的任意用户定义的类。
1 这个问题+答案是对主持人无限期锁定的earlier question的答案,即它已经是重复的,除了之前没有发布完全满意的答案锁定。如果下面的答案可以在那里发布,我会接受它作为解决方案,除非提供更好的答案,因为它确实回答了问题。这不是at Meta所讨论的所谓答案,例如无法在x
处理bar
这样的论点,但它基于basic idea put forth by Johannes Schaub。
功能