c – rvalue或lvalue(const)引用参数

我想通过r-或l-值(const)引用将参数(一些具体类型,比如int)传递给成员函数.我的解决方案是:

#include <type_traits>
#include <utility>

struct F
{
    using desired_parameter_type = int;

    template< typename X, typename = typename std::enable_if< std::is_same< typename std::decay< X >::type, desired_parameter_type >::value >::type >
    void operator () (X && x) const
    {
        // or even static_assert(std::is_same< typename std::decay< X >::type, desired_parameter_type >::value, "");
        std::forward< X >(x); // something useful
    }
};

另一个例子是http://pastebin.com/9kgHmsVC.

但它太冗长了.如何以更简单的方式做到这一点?

也许我应该使用std :: remove_reference和std :: remove_const的叠加而不是std :: decay,但这里只是简化.

最佳答案
如果我正确理解你的问题,你希望有一个函数,其参数是一个右值引用(如果提供了右值)或一个左值引用const(如果提供了左值).

但是这个功能会做什么?好吧,因为它必须能够处理这两种情况,包括提供左值的情况,它不能修改它的输入(至少不是绑定到x参数的那个) – 如果确实如此,它将违反语义const参考.

但话又说回来,如果它不能改变参数的状态,就没有理由允许rvalue引用:而是让x一直是对const的lvalue引用.对const的左值引用可以绑定到rvalues,因此您将被允许传递rvalues和lvalues.

如果函数的语义根据传递的内容而不同,那么我会说编写两个这样的函数更有意义:一个采用右值引用,另一个采用左值引用const.

转载注明原文:c – rvalue或lvalue(const)引用参数 - 代码日志