【发布时间】:2020-02-19 01:52:02
【问题描述】:
我正在研究 C++11 代码库,想知道如何调用传递任意参数的成员类型的任何函数。 请注意,由于我使用的是 C++11,因此无法使用 std::invoke 之类的内容。
我开始在 Outer 类中创建一个函数模板,但我最初的尝试给了我一个编译错误。
#include <iostream>
#include <utility>
#include <type_traits>
struct Inner {
void bar(int x) {
std::cout << "Called: x=" << x << std::endl;
}
};
struct Outer {
explicit Outer(Inner *i) : b{i} {}
void foo(int) {}
Inner* b;
template <typename Func, typename ... Args>
void CallInner(Func&& f, Args&& ... args) {
b->f(std::forward<Args>(args)...);
}
};
int main() {
Inner inner{};
Outer outer(&inner);
outer.CallInner(&Inner::bar, 5);
}
同样,我想保持函数 CallInner 的签名与上述示例代码保持不变。
【问题讨论】:
标签: c++ c++11 templates variadic-templates