考虑以下代码片段:
struct Base {
std::string foo () const { std::cout << "Base::foo()\n"; return "X"; }
};
struct Der : Base {};
struct Ptr : std::integral_constant<std::string (Base:: *) () const, &Base::foo> {};
使用方法如下:
Der der;
std::string s = (der.*Ptr::value) ();
std::cout << s << "\n";
输出结果与期望的一致:
Base::foo()
X
一切看起来都很好。
我的问题是:这段代码是否正确?还是我正在踩undefined行为的领域?我可以直接在派生类对象上使用基类的成员函数指针吗?
std::integral_constant
中存储指针。这是一个有趣的方法。 - François Andrieux