Есть ли способ написать функцию, которая принимает l-val ref или r-val reference в качестве входных параметров? - PullRequest
0 голосов
/ 04 ноября 2011

Мотивация:

У меня есть функция

func(const string& s);
{
    //...
}

конечно, это не сработает:

func("hello" + " " + "world");

это решает эту проблему:

func(string&& s);

Есть ли способ написать func, чтобы он автоматически работал как с r-значением, так и с l-значением?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

R-значения связываются с константными значениями без проблем. Проблема с вашим кодом заключается в типах. Вам нужен хотя бы один std::string для использования перегруженного оператора +.

func(std::string("hello") + " " + "world");
1 голос
/ 04 ноября 2011

Да. Вы можете использовать эталонное свертывание шаблонов:

template <typename S>
func (S && s)
{
    //...
}

Это сохраняет l- и r-ценность, а также постоянство.

...