【问题标题】:this of a calling object as a default argument C++调用对象的 this 作为默认参数 C++
【发布时间】:2016-11-02 15:52:32
【问题描述】:

我正在尝试创建一个具有可变数量参数(0 到 1)的 C++ 宏,该宏将充当函数调用的包装器,以便将调用对象的 this 指针作为默认参数值提供。

以便用户可以拨打电话:

    CALL(pointer) // An argument is supplied, pass it to the call
    CALL()        // No argument supplied, pass the this pointer value instead

【问题讨论】:

  • 1.实际的问题是什么? 2. 到目前为止,您尝试过什么?
  • C++ 宏没有太多的能力,我建议找另一种方法来做你想做的事。
  • @MarkRansom Boost.PP 不同意你的观点 :)
  • 我完全明白你在问什么。我是说你做错了。再次阅读我的第一条评论。不要再成为那些执着于一个想法而拒绝听取任何其他想法的人中的一员了。否决票旨在表明您在这里做错了什么。我和其他大多数评论者都表示,问题中的目标要么不清楚,要么只是一个坏主意。我在第一条评论中给出了我的理由,并提供了一个接近的替代方案。我知道这不能回答直接问题,但它提供了推荐的替代方案

标签: c++ macros this


【解决方案1】:

您可以使用 boost 编写一个宏来计算参数的数量。但是,这仅在您至少有一个参数时才有效。当你有零参数时,boost 认为你有一个。因此,这并不完全是您问题的答案(除非您可以接受至少传递一个参数)。尽管如此,我还是将其发布为答案,因为它可能对遇到类似情况的人有所帮助,而其他“重复”问题的已接受答案并未提供此解决方案。

#include <iostream>
#include <boost/preprocessor/tuple/elem.hpp>

#define CALL(...)                                    \
  {                                                  \
    auto num = BOOST_PP_VARIADIC_SIZE(__VA_ARGS__);  \
    std::cout << "called with " << num << " args." << std::endl; \
  }

int main() {
  CALL(1, 2);
  CALL(1);
}

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多