boost::可选矢量通过引用传递作为默认参数

boost::optional vector pass by reference as default parameter

本文关键字:默认 参数 引用 boost      更新时间:2023-10-16
boost::optional<std::vector<std::wstring>> filePath;

如果我有上述提升可选向量,是否可以通过引用和作为可选参数传递它?

Test(const boost::filesystem::path& targetPath, boost::optional<std::vector<std::wstring>> filePath = boost::none);

我可以同时通过引用传递filePath作为默认参数和引用吗?

您可以使用可选引用:

请参阅 http://www.boost.org/doc/libs/1_58_0/libs/optional/doc/html/boost_optional/optional_references.html

住在科里鲁

#include <boost/optional.hpp>
#include <boost/filesystem.hpp>
#include <vector>
#include <iostream>
void Test(const boost::filesystem::path& targetPath,
          boost::optional<std::vector<std::wstring>& > filePath = boost::none) {
    if (filePath)
        std::cout << filePath->size() << " elementsn";
    else
        std::cout << "default parametern";
}
int main() {
    std::vector<std::wstring> path(3, L"bla");
    Test("blabla", path);
    Test("blabla");
}

指纹

3 elements
default parameter

您正在执行的操作是合法的,但不能将引用作为默认参数传递。如果你想要它,你需要传递一个值,或者文件路径包裹在另一个 boost::optional 周围。

要么按照@sehe写的那样将引用放在 boost 可选 ( boost::optional<std::vector<std::wstring>& > ) 内,或者使用 const 引用:

void Test(const boost::filesystem::path& targetPath,
          const boost::optional<std::vector<std::wstring> >& filePath = boost::none)
{
}

现场示例:http://coliru.stacked-crooked.com/a/324e31e1854fadb9

在C++不允许将临时引用绑定到非常量引用。在这种情况下,默认值是临时值,因此您需要一个常量引用。