【问题标题】:Define variable type定义变量类型
【发布时间】:2017-01-30 03:06:34
【问题描述】:

我正在尝试将打印参数的工作定义转换为正确的函数,但我不确定变量类型。

我的工作方法是:

#define WARN(x)     std::cout << "WARNING! " << x << "!" << std::endl;

然后我可以传递一个类似于 using std::cout 的句子

WARN("This is a test warning." << " And this is some more stuff...");

但是,我觉得这应该更整齐地包装在一个函数中,而不是使用定义。

请您帮助我了解预处理器如何解释变量 x,以及如何将定义转换为函数。

附:我知道我可以使用可变参数函数,但我宁愿不必传递参数的数量,而是宁愿完全避免可变参数。

【问题讨论】:

  • 不要将可变参数函数误认为可变参数模板,它知道传递了多少参数及其类型。
  • 我没有意识到它们是两个不同的东西。我去看看模板,谢谢!
  • 如果它只是一个参数,那么可变参数部分也会变得多余。一个普通的模板就足够了。

标签: c++ printing types macros c-preprocessor


【解决方案1】:

但我不确定变量类型。

这就是使用函数模板可以提供干净解决方案的地方。

template <typename T>
void WARN(T const& x)
{
  std::cout << "WARNING! " << x << "!" << std::endl;
}

是一个很好的替代品

#define WARN(x)     std::cout << "WARNING! " << x << "!" << std::endl;

【讨论】:

  • 感谢您的建议,但这适用于多个变量吗?例如,我可以通过:“这是一个字符串”
  • @user7119460,是的,你可以有多个参数的函数模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多