static_cast的参数转发

时间:2013-06-17 10:34:37

标签: c++ argument-passing static-cast perfect-forwarding

假设我不喜欢static_cast运算符的名称,并希望将其包装在具有不同名称的函数中,比如fancy_static_cast,但完全保留了语义。我该怎么办?更具体地说,static_cast是通过价值还是通过引用来接受它的论证?或者它取决于参数表达式?我应该提供几个重载,还是会这样做?

template <typename To, typename From>
To fancy_static_cast(From&& from)
{
    return static_cast<To>(std::forward<From>(from));
}

1 个答案:

答案 0 :(得分:0)

  

假设我不喜欢static_cast运算符的名称,并希望将其包装在具有不同名称的函数中,比如fancy_static_cast,但完全保留了语义。我该怎么办?

你不应该。

相反,当表示 static_cast时, static_cast。否则你只能实现缺乏可维护性:你的代码的读者首先不会识别static_cast,当他们看到这个功能时,他们就不知道你为什么这么做并且浪费脑力只是意识到你什么都没做。

使用您的代码清晰明了。说出你的意思,不要因为过于花哨而欺骗读者(包括你自己)。不要使用误导性的namings,而是尝试使用每个人都知道的语言部分。给自己和他人尽可能少的机会误解你所写的内容。