boost::optional<std::vector<std::wstring>> filePath;
如果我有上面的 boost 可选向量,是否可以通过引用传递它并作为可选参数?
Test(const boost::filesystem::path& targetPath, boost::optional<std::vector<std::wstring>> filePath = boost::none);
我可以filePath
同时作为默认参数和引用传递吗?
boost::optional<std::vector<std::wstring>> filePath;
如果我有上面的 boost 可选向量,是否可以通过引用传递它并作为可选参数?
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() << " elements\n";
else
std::cout << "default parameter\n";
}
int main() {
std::vector<std::wstring> path(3, L"bla");
Test("blabla", path);
Test("blabla");
}
印刷
3 elements
default parameter
您所做的是合法的,但您不能将引用作为默认参数传递。如果你想要这样,你需要传递一个值,或者包裹在另一个 boost::optional 周围的文件路径。
正如@sehe 所写,将引用放在 boost optional ( 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++ 中,不允许将临时对象绑定到非常量引用。在这种情况下,默认值是临时值,因此您需要一个 const 引用。