我的代码的一个非常简化的版本是这样的:
#define proxy(name, type, arg) \
void name(function_list_object* obj, type arg) \
{ \
void (*foo)(type arg) = obj->find_ptr_for(STRINGIZE(name)); \
foo(arg); \
} \
proxy(fi, int, i);
效果很好。但是对于 C++11:
proxy(fs, std::string&&, rvrs);
...预计会导致错误,因为我需要std::move
将右值转移到另一个级别。
我正在考虑这样的解决方案,但我不确定它是否总是安全的:
#if defined(MY_CXX11)
# define MY_MOVE(x) std::move(x)
#else
# define MY_MOVE(x) x
#endif
#define proxy(name, type, arg) \
void name(function_list_object* obj, type arg) \
{ \
void (*foo)(type arg) = obj->find_ptr_for(STRINGIZE(name)); \
foo(MY_MOVE(arg)); \
} \
在我看来,这适用于所有可能的类型。我对吗?