听起来很傻,这可能吗?
struct Bar {
void dummy() { }
#define act(name, ...) dummy(); \
// Do something inside Bar, not in main
}
bar.act(push_back, 42);
我认为不是。但我试图以某种方式将可变参数宏定义为Bar
的成员函数。常规版本如下:
template <typename Func, typename... Args>
auto act(Func func, Args&&... args) -> decltype(func(std::forward<Args>(args)...)) {
return func(std::forward<Args>(args)...);
}
这需要两件事:我可以使用这个宏来定义所需的每个成员函数:
#define cmf(name) struct name \
{ \
template <typename... Args> \
auto operator()(Args&&... args) -> decltype(cont.name(std::forward<Args>(args)...)) { \
return cont.name(std::forward<Args>(args)...); \
} \
} name;
// ...
bar.push_back(42);
或者是不可行的演员:
bar.act(std::bind((void (std::vector<int>::*)
(const typename std::vector<int>::value_type& value))
&std::vector<int>::push_back, &bar.cont, std::placeholders::_1), 42);
我的目标是使用此可变参数宏为name参数调用cmf
,然后使用__VA_ARGS__
作为函数参数。