C++包装变量参数宏

发布于 2025-01-05 17:03:30 字数 326 浏览 0 评论 0原文

例如,我想做:

#define macro(a) foo( _blah_, *(dword*)(&a) );
#define macro(a,b) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) );
#define macro(a,b,c) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) , *(dword*)(&c) );

但是当然有变量 no。的论点。我本质上想单独包装每个参数,而不是将所有参数作为一个 __VA_ARGS__ 块传递。

I want to do for example:

#define macro(a) foo( _blah_, *(dword*)(&a) );
#define macro(a,b) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) );
#define macro(a,b,c) foo( _blah_, *(dword*)(&a) , *(dword*)(&b) , *(dword*)(&c) );

But of course with variable no. of arguments. I essentially want to wrap each argument indiviudally, not pass all the arguments as one __VA_ARGS__ block.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

开始看清了 2025-01-12 17:03:30

与任何其他理智的人一样,我建议您放弃宏,尤其是使用 C++11 的可变参数模板:

template<class T>
dword& make_dword(T& v){
  return *reinterpret_cast<dword*>(&v);
}

template<class... Args>
void bar(Args&... args){
  foo(_blah_, make_dword(args)...);
}

这应该可以解决问题。

我需要提一下,那些 reinterpret_cast 看起来很可疑,但......

As any other sane person, I advise you to drop the macros, especially with C++11's variadic templates:

template<class T>
dword& make_dword(T& v){
  return *reinterpret_cast<dword*>(&v);
}

template<class... Args>
void bar(Args&... args){
  foo(_blah_, make_dword(args)...);
}

This should do the trick.

I need to mention that those reinterpret_casts look pretty dubious, though...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文