1
boost::optional<std::vector<std::wstring>> filePath;

上記のブーストオプションのベクトルがある場合、これを参照およびオプションのパラメーターとして渡すことは可能ですか?

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

filePathデフォルトのパラメータと参照渡しを同時に渡すことはできますか?

4

3 に答える 3

4

オプションの参照を使用できます。

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

Live On Coliru

#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
于 2015-06-18T11:26:55.793 に答える
0

あなたがしていることは合法ですが、参照をデフォルトのパラメーターとして渡すことはできません。それが必要な場合は、値を渡すか、ファイル パスを別の boost::optional でラップする必要があります。

于 2015-06-18T10:32:30.947 に答える
0

boost::optional<std::vector<std::wstring>& >@sehe が書いたように、boost optional ( ) 内に参照を入れるか、 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 参照にバインドすることはできません。この場合、デフォルト値は一時的であるため、const 参照が必要です。

于 2015-06-18T11:39:32.450 に答える