gpt4 book ai didi

c++ - 找不到时生成默认值

转载 作者:太空狗 更新时间:2023-10-29 21:23:19 26 4
gpt4 key购买 nike

我有一个输入 vector ,它的大小可以介于空元素和 3 个元素之间。我希望生成的字符串始终是 3 个由空格分隔的 float ,如果 vector 中没有足够的元素,则使用默认值。到目前为止,我只输出了 vector 的内容:

#include <iostream>
#include <iterator>
#include <vector>

#include "boost/spirit/include/karma.hpp"

namespace karma = boost::spirit::karma;
namespace phx = boost::phoenix;
typedef std::back_insert_iterator<std::string> BackInsertIt;

int main( int argc, char* argv[] )
{
std::vector<float> input;
input.push_back(1.0f);
input.push_back(2.0f);

struct TestGram
: karma::grammar<BackInsertIt, std::vector<float>(), karma::space_type>
{
TestGram() : TestGram::base_type(output)
{
using namespace karma;
floatRule = double_;

output = repeat(3)[ floatRule ];
}

karma::rule<BackInsertIt, std::vector<float>(), karma::space_type> output;
karma::rule<BackInsertIt, float(), karma::space_type> floatRule;
} testGram;


std::string output;
BackInsertIt sink(output);
karma::generate_delimited( sink, testGram, karma::space, input );

std::cout << "Generated: " << output << std::endl;

std::cout << "Press enter to exit" << std::endl;
std::cin.get();
return 0;
}

我已经尝试将 float 规则修改为如下内容:floatRule = double_ | lit(0.0f),但这只会给我编译错误。我尝试过的许多其他类似的东西也是如此。

我真的不知道如何让它工作。一些帮助会很棒 :)

编辑:只是为了说清楚。如果我有一个包含 2 个元素的 vector :1.0 和 2.0,我想生成一个如下所示的字符串:"1.0 2.0 0.0"(最后一个值应该是默认值)。

最佳答案

不漂亮,但工作:

#include <iostream>
#include <iterator>
#include <vector>
#define BOOST_SPIRIT_USE_PHOENIX_V3
#include "boost/spirit/include/karma.hpp"
#include <boost/spirit/include/phoenix.hpp>

namespace karma = boost::spirit::karma;
namespace phx = boost::phoenix;
typedef std::back_insert_iterator<std::string> BackInsertIt;

int main(int argc, char* argv[]) {
std::vector<float> input;
input.push_back(1.0f);
input.push_back(2.0f);

struct TestGram: karma::grammar<BackInsertIt, std::vector<float>(),
karma::space_type> {
TestGram()
: TestGram::base_type(output) {
using namespace karma;
floatRule = double_;

output = repeat(phx::bind(&std::vector<float>::size, (karma::_val)))[floatRule]
<< repeat(3 - phx::bind(&std::vector<float>::size, (karma::_val)))[karma::lit("0.0")];
}

karma::rule<BackInsertIt, std::vector<float>(), karma::space_type> output;
karma::rule<BackInsertIt, float(), karma::space_type> floatRule;
} testGram;

std::string output;
BackInsertIt sink(output);
karma::generate_delimited(sink, testGram, karma::space, input);

std::cout << "Generated: " << output << std::endl;

return 0;
}

关于c++ - 找不到时生成默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com